EditorOptions/Mouse: Added sort to grid

git-svn-id: trunk@20442 -
This commit is contained in:
martin 2009-06-05 15:40:52 +00:00
parent cbea652f5f
commit 54811dc268
3 changed files with 104 additions and 44 deletions

View File

@ -32,7 +32,9 @@ inherited EditorMouseOptionsFrame: TEditorMouseOptionsFrame
RowCount = 1
ScrollBars = ssAutoVertical
TabOrder = 0
OnCompareCells = ActionGridCompareCells
OnDblClick = UpdateButtonClick
OnHeaderClick = ActionGridHeaderClick
OnHeaderSized = ActionGridHeaderSized
OnMouseDown = ActionGridMouseDown
OnMouseMove = ActionGridMouseMove
@ -60,7 +62,6 @@ inherited EditorMouseOptionsFrame: TEditorMouseOptionsFrame
Top = 0
Width = 5
MinSize = 1
OnCanResize = Splitter1CanResize
end
end
object p3: TPanel[1]

View File

@ -12,34 +12,34 @@ LazarusResources.Add('TEditorMouseOptionsFrame','FORMDATA',[
+'ExtendedSelect'#8#9'FixedCols'#2#0#7'Options'#11#15'goFixedVertLine'#15'goF'
+'ixedHorzLine'#10'goVertLine'#10'goHorzLine'#13'goRangeSelect'#11'goColSizin'
+'g'#11'goRowSelect'#14'goSmoothScroll'#0#8'RowCount'#2#1#10'ScrollBars'#7#14
+'ssAutoVertical'#8'TabOrder'#2#0#10'OnDblClick'#7#17'UpdateButtonClick'#13'O'
+'nHeaderSized'#7#21'ActionGridHeaderSized'#11'OnMouseDown'#7#19'ActionGridMo'
+'useDown'#11'OnMouseMove'#7#19'ActionGridMouseMove'#9'OnMouseUp'#7#17'Action'
+'GridMouseUp'#8'OnResize'#7#16'ActionGridResize'#0#0#9'TTreeView'#11'Context'
+'Tree'#4'Left'#2#0#6'Height'#3'z'#1#3'Top'#2#0#5'Width'#3#130#0#5'Align'#7#6
+'alLeft'#10'AutoExpand'#9#20'Constraints.MinWidth'#2'2'#17'DefaultItemHeight'
+#2#17#8'ReadOnly'#9#8'ShowRoot'#8#8'TabOrder'#2#1#8'OnChange'#7#17'ContextTr'
+'eeChange'#7'Options'#11#13'tvoAutoExpand'#17'tvoAutoItemHeight'#16'tvoHideS'
+'election'#21'tvoKeepCollapsedNodes'#11'tvoReadOnly'#14'tvoShowButtons'#12't'
+'voShowLines'#11'tvoToolTips'#0#0#0#9'TSplitter'#9'Splitter1'#4'Left'#3#130#0
+#6'Height'#3'z'#1#3'Top'#2#0#5'Width'#2#5#7'MinSize'#2#1#11'OnCanResize'#7#18
+'Splitter1CanResize'#0#0#0#242#2#1#6'TPanel'#2'p3'#23'AnchorSideRight.Contro'
+'l'#7#2'p2'#20'AnchorSideRight.Side'#7#9'asrBottom'#24'AnchorSideBottom.Cont'
+'rol'#7#2'p2'#21'AnchorSideBottom.Side'#7#9'asrBottom'#4'Left'#2#0#6'Height'
+#2'%'#3'Top'#3'z'#1#5'Width'#3'b'#2#5'Align'#7#8'alBottom'#8'AutoSize'#9#10
+'BevelOuter'#7#6'bvNone'#12'ClientHeight'#2'%'#11'ClientWidth'#3'b'#2#8'TabO'
+'rder'#2#1#0#7'TButton'#9'DelButton'#22'AnchorSideLeft.Control'#7#2'p3'#21'A'
+'nchorSideTop.Control'#7#2'p3'#4'Left'#2#0#6'Height'#2#25#3'Top'#2#6#5'Width'
+#2'O'#8'AutoSize'#9#17'BorderSpacing.Top'#2#6#7'Caption'#6#9'DelButton'#7'On'
+'Click'#7#14'DelButtonClick'#8'TabOrder'#2#2#0#0#7'TButton'#12'AddNewButton'
+#21'AnchorSideTop.Control'#7#12'UpdateButton'#23'AnchorSideRight.Control'#7#2
+'p3'#20'AnchorSideRight.Side'#7#9'asrBottom'#4'Left'#3#246#1#6'Height'#2#25#3
+'Top'#2#6#5'Width'#2'l'#7'Anchors'#11#5'akTop'#7'akRight'#0#8'AutoSize'#9#7
+'Caption'#6#12'AddNewButton'#7'OnClick'#7#17'AddNewButtonClick'#8'TabOrder'#2
+#0#0#0#7'TButton'#12'UpdateButton'#21'AnchorSideTop.Control'#7#2'p3'#23'Anch'
+'orSideRight.Control'#7#12'AddNewButton'#4'Left'#3#140#1#6'Height'#2#25#3'To'
+'p'#2#6#5'Width'#2'd'#7'Anchors'#11#5'akTop'#7'akRight'#0#8'AutoSize'#9#17'B'
+'orderSpacing.Top'#2#6#19'BorderSpacing.Right'#2#6#20'BorderSpacing.Bottom'#2
+#6#7'Caption'#6#12'UpdateButton'#7'OnClick'#7#17'UpdateButtonClick'#8'TabOrd'
+'er'#2#1#0#0#0#0
+'ssAutoVertical'#8'TabOrder'#2#0#14'OnCompareCells'#7#22'ActionGridCompareCe'
+'lls'#10'OnDblClick'#7#17'UpdateButtonClick'#13'OnHeaderClick'#7#21'ActionGr'
+'idHeaderClick'#13'OnHeaderSized'#7#21'ActionGridHeaderSized'#11'OnMouseDown'
+#7#19'ActionGridMouseDown'#11'OnMouseMove'#7#19'ActionGridMouseMove'#9'OnMou'
+'seUp'#7#17'ActionGridMouseUp'#8'OnResize'#7#16'ActionGridResize'#0#0#9'TTre'
+'eView'#11'ContextTree'#4'Left'#2#0#6'Height'#3'z'#1#3'Top'#2#0#5'Width'#3
+#130#0#5'Align'#7#6'alLeft'#10'AutoExpand'#9#20'Constraints.MinWidth'#2'2'#17
+'DefaultItemHeight'#2#17#8'ReadOnly'#9#8'ShowRoot'#8#8'TabOrder'#2#1#8'OnCha'
+'nge'#7#17'ContextTreeChange'#7'Options'#11#13'tvoAutoExpand'#17'tvoAutoItem'
+'Height'#16'tvoHideSelection'#21'tvoKeepCollapsedNodes'#11'tvoReadOnly'#14't'
+'voShowButtons'#12'tvoShowLines'#11'tvoToolTips'#0#0#0#9'TSplitter'#9'Splitt'
+'er1'#4'Left'#3#130#0#6'Height'#3'z'#1#3'Top'#2#0#5'Width'#2#5#7'MinSize'#2#1
+#0#0#0#242#2#1#6'TPanel'#2'p3'#23'AnchorSideRight.Control'#7#2'p2'#20'Anchor'
+'SideRight.Side'#7#9'asrBottom'#24'AnchorSideBottom.Control'#7#2'p2'#21'Anch'
+'orSideBottom.Side'#7#9'asrBottom'#4'Left'#2#0#6'Height'#2'%'#3'Top'#3'z'#1#5
+'Width'#3'b'#2#5'Align'#7#8'alBottom'#8'AutoSize'#9#10'BevelOuter'#7#6'bvNon'
+'e'#12'ClientHeight'#2'%'#11'ClientWidth'#3'b'#2#8'TabOrder'#2#1#0#7'TButton'
+#9'DelButton'#22'AnchorSideLeft.Control'#7#2'p3'#21'AnchorSideTop.Control'#7
+#2'p3'#4'Left'#2#0#6'Height'#2#25#3'Top'#2#6#5'Width'#2'O'#8'AutoSize'#9#17
+'BorderSpacing.Top'#2#6#7'Caption'#6#9'DelButton'#7'OnClick'#7#14'DelButtonC'
+'lick'#8'TabOrder'#2#2#0#0#7'TButton'#12'AddNewButton'#21'AnchorSideTop.Cont'
+'rol'#7#12'UpdateButton'#23'AnchorSideRight.Control'#7#2'p3'#20'AnchorSideRi'
+'ght.Side'#7#9'asrBottom'#4'Left'#3#246#1#6'Height'#2#25#3'Top'#2#6#5'Width'
+#2'l'#7'Anchors'#11#5'akTop'#7'akRight'#0#8'AutoSize'#9#7'Caption'#6#12'AddN'
+'ewButton'#7'OnClick'#7#17'AddNewButtonClick'#8'TabOrder'#2#0#0#0#7'TButton'
+#12'UpdateButton'#21'AnchorSideTop.Control'#7#2'p3'#23'AnchorSideRight.Contr'
+'ol'#7#12'AddNewButton'#4'Left'#3#140#1#6'Height'#2#25#3'Top'#2#6#5'Width'#2
+'d'#7'Anchors'#11#5'akTop'#7'akRight'#0#8'AutoSize'#9#17'BorderSpacing.Top'#2
+#6#19'BorderSpacing.Right'#2#6#20'BorderSpacing.Bottom'#2#6#7'Caption'#6#12
+'UpdateButton'#7'OnClick'#7#17'UpdateButtonClick'#8'TabOrder'#2#1#0#0#0#0
]);

View File

@ -42,6 +42,9 @@ type
ActionGrid: TStringGrid;
ContextTree: TTreeView;
p3: TPanel;
procedure ActionGridCompareCells(Sender: TObject; ACol, ARow, BCol, BRow: Integer;
var Result: integer);
procedure ActionGridHeaderClick(Sender: TObject; IsColumn: Boolean; Index: Integer);
procedure ActionGridMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
X, Y: Integer);
procedure ActionGridMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
@ -49,7 +52,6 @@ type
Y: Integer);
procedure ContextTreeChange(Sender: TObject; Node: TTreeNode);
procedure AddNewButtonClick(Sender: TObject);
procedure Splitter1CanResize(Sender: TObject; var NewSize: Integer; var Accept: Boolean);
procedure UpdateButtonClick(Sender: TObject);
procedure DelButtonClick(Sender: TObject);
procedure ActionGridHeaderSized(Sender: TObject; IsColumn: Boolean; Index: Integer);
@ -67,10 +69,13 @@ type
FGutterActionsLines: TSynEditMouseActions;
FCurActions: TSynEditMouseActions;
FSort1, FSort2, FSort3: Integer;
ChangeDlg: TMouseaActionDialog;
FColWidths: Array of Integer;
FLastWidth: Integer;
FIsHeaderSizing: Boolean;
procedure SortGrid;
procedure SelectRow(AAct: TSynEditMouseAction);
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
@ -109,6 +114,7 @@ begin
optlist := TStringlist.Create;
for i := 1 to FCurActions.Count do begin
act := FCurActions[i-1];
ActionGrid.Objects[0, i] := act;
ActionGrid.Cells[0, i] := act.DisplayName;
ActionGrid.Cells[1, i] := ButtonName[act.Button];
ActionGrid.Cells[2, i] := ClickName[act.ClickCount];
@ -124,8 +130,64 @@ begin
end;
optlist.Free;
ActionGrid.Row := 1;
SortGrid;
end;
procedure TEditorMouseOptionsFrame.ActionGridHeaderClick(Sender: TObject; IsColumn: Boolean;
Index: Integer);
begin
If Index <> FSort1 then begin
if FSort2 <> index then
Fsort3 := FSort2;
Fsort2 := FSort1;
Fsort1 := Index;
end;
SortGrid;
end;
procedure TEditorMouseOptionsFrame.ActionGridCompareCells(Sender: TObject; ACol, ARow, BCol,
BRow: Integer; var Result: integer);
function CompareCol(i : Integer) : Integer;
begin
case i of
2: // ClickCount
Result := ord(TSynEditMouseAction(ActionGrid.Objects[0, ARow]).ClickCount)
- ord(TSynEditMouseAction(ActionGrid.Objects[0, BRow]).ClickCount);
3: // ClickDir (down first)
Result := ord(TSynEditMouseAction(ActionGrid.Objects[0, BRow]).ClickDir)
- ord(TSynEditMouseAction(ActionGrid.Objects[0, ARow]).ClickDir);
else
Result := AnsiCompareText(ActionGrid.Cells[i, ARow], ActionGrid.Cells[i, BRow]);
end;
end;
begin
Result := CompareCol(FSort1);
if Result = 0 then
Result := CompareCol(FSort2);
if Result = 0 then
Result := CompareCol(FSort3);
if Result = 0 then
Result := TSynEditMouseAction(ActionGrid.Objects[0, ARow]).ID
- TSynEditMouseAction(ActionGrid.Objects[0, BRow]).ID;
end;
procedure TEditorMouseOptionsFrame.SortGrid;
begin
ActionGrid.SortColRow(True, 0);
end;
procedure TEditorMouseOptionsFrame.SelectRow(AAct: TSynEditMouseAction);
var
i: Integer;
begin
For i := 1 to ActionGrid.RowCount -1 do
if ActionGrid.Objects[0, i] = AAct then begin
ActionGrid.Row := i;
break;
end;
end;
procedure TEditorMouseOptionsFrame.AddNewButtonClick(Sender: TObject);
var
MAct: TSynEditMouseAction;
@ -148,26 +210,18 @@ begin
MessageDlg(dlgMouseOptErrorDup, dlgMouseOptErrorDupText, mtError, [mbOk], 0);
end;
ContextTreeChange(nil, FCurNode);
ActionGrid.Row := FCurActions.Count;
SelectRow(MAct);
end;
end;
procedure TEditorMouseOptionsFrame.Splitter1CanResize(Sender: TObject; var NewSize: Integer;
var Accept: Boolean);
begin
end;
procedure TEditorMouseOptionsFrame.UpdateButtonClick(Sender: TObject);
var
MAct, MOld: TSynEditMouseAction;
r: LongInt;
begin
if FCurActions = nil then exit;
if (ActionGrid.Row-1 >= FCurActions.Count) or (ActionGrid.Row < 1) then exit;
r := ActionGrid.Row;
MAct := FCurActions[r-1];
MAct := TSynEditMouseAction(ActionGrid.Objects[0, ActionGrid.Row]);
ChangeDlg.ReadFromAction(MAct);
if ChangeDlg.ShowModal = mrOK then begin
try
@ -186,7 +240,7 @@ begin
end;
MOld.Free;
ContextTreeChange(nil, FCurNode);
ActionGrid.Row := r;
SelectRow(MAct);
end;
end;
@ -194,7 +248,8 @@ procedure TEditorMouseOptionsFrame.DelButtonClick(Sender: TObject);
begin
if FCurActions = nil then exit;
if (ActionGrid.Row-1 >= FCurActions.Count) or (ActionGrid.Row < 1) then exit;
FCurActions.Delete(ActionGrid.row-1);
FCurActions.Delete(FCurActions.IndexOf(TSynEditMouseAction
(ActionGrid.Objects[0, ActionGrid.row])));
ActionGrid.Row := 1;
ContextTreeChange(nil, FCurNode);
end;
@ -317,6 +372,10 @@ begin
ActionGrid.ColWidths[8] := ActionGrid.ColWidths[8] * 3;
ActionGridHeaderSized(nil, true, 0);
FSort1 := 1; // Button
FSort2 := 2; // CCount
FSort3 := 3; // Cdir
DelButton.Caption := dlgMouseOptBtnDel;
UpdateButton.Caption := dlgMouseOptBtnUdp;
AddNewButton.Caption := dlgMouseOptBtnAdd;