#444: turn first bunch of quick filter menu items into TAction's, with customizable shortcuts

This commit is contained in:
Ansgar Becker
2020-04-19 19:17:30 +02:00
parent 3f8658b711
commit d316ec85c0
2 changed files with 131 additions and 86 deletions

View File

@ -3129,6 +3129,55 @@ object MainForm: TMainForm
ShortCut = 16416 ShortCut = 16416
OnExecute = actSynEditCompletionProposeExecute OnExecute = actSynEditCompletionProposeExecute
end end
object actQuickFilterFocusedValue1: TAction
Category = 'Data'
Caption = 'actQuickFilterFocusedValue1'
ImageIndex = 61
ShortCut = 24625
OnExecute = QuickFilterClick
end
object actQuickFilterFocusedValue2: TAction
Category = 'Data'
Caption = 'actQuickFilterFocusedValue2'
ImageIndex = 61
ShortCut = 24626
OnExecute = QuickFilterClick
end
object actQuickFilterFocusedValue3: TAction
Category = 'Data'
Caption = 'actQuickFilterFocusedValue3'
ImageIndex = 61
ShortCut = 24627
OnExecute = QuickFilterClick
end
object actQuickFilterFocusedValue4: TAction
Category = 'Data'
Caption = 'actQuickFilterFocusedValue4'
ImageIndex = 61
ShortCut = 24628
OnExecute = QuickFilterClick
end
object actQuickFilterFocusedValue5: TAction
Category = 'Data'
Caption = 'actQuickFilterFocusedValue5'
ImageIndex = 61
ShortCut = 24629
OnExecute = QuickFilterClick
end
object actQuickFilterFocusedValue6: TAction
Category = 'Data'
Caption = 'actQuickFilterFocusedValue6'
ImageIndex = 61
ShortCut = 24630
OnExecute = QuickFilterClick
end
object actQuickFilterFocusedValue7: TAction
Category = 'Data'
Caption = 'actQuickFilterFocusedValue7'
ImageIndex = 61
ShortCut = 24631
OnExecute = QuickFilterClick
end
end end
object menuConnections: TPopupMenu object menuConnections: TPopupMenu
AutoHotkeys = maManual AutoHotkeys = maManual
@ -3470,44 +3519,26 @@ object MainForm: TMainForm
object menuQuickFilter: TMenuItem object menuQuickFilter: TMenuItem
Caption = 'Quick Filter' Caption = 'Quick Filter'
ImageIndex = 53 ImageIndex = 53
object QF1: TMenuItem object menuQuickFilterFocusedValue1: TMenuItem
AutoHotkeys = maManual Action = actQuickFilterFocusedValue1
Caption = 'Column = Value'
ImageIndex = 61
OnClick = QuickFilterClick
end end
object QF2: TMenuItem object menuQuickFilterFocusedValue2: TMenuItem
AutoHotkeys = maManual Action = actQuickFilterFocusedValue2
Caption = 'Column != Value'
ImageIndex = 61
OnClick = QuickFilterClick
end end
object QF3: TMenuItem object menuQuickFilterFocusedValue3: TMenuItem
AutoHotkeys = maManual Action = actQuickFilterFocusedValue3
Caption = 'Column > Value'
ImageIndex = 61
OnClick = QuickFilterClick
end end
object QF4: TMenuItem object menuQuickFilterFocusedValue4: TMenuItem
AutoHotkeys = maManual Action = actQuickFilterFocusedValue4
Caption = 'Column < Value'
ImageIndex = 61
OnClick = QuickFilterClick
end end
object QF5: TMenuItem object menuQuickFilterFocusedValue5: TMenuItem
Caption = 'Column LIKE Value%' Action = actQuickFilterFocusedValue5
ImageIndex = 61
OnClick = QuickFilterClick
end end
object QF6: TMenuItem object menuQuickFilterFocusedValue6: TMenuItem
Caption = 'Column LIKE %Value' Action = actQuickFilterFocusedValue6
ImageIndex = 61
OnClick = QuickFilterClick
end end
object QF7: TMenuItem object menuQuickFilterFocusedValue7: TMenuItem
Caption = 'Column LIKE %Value%' Action = actQuickFilterFocusedValue7
ImageIndex = 61
OnClick = QuickFilterClick
end end
object QFvalues: TMenuItem object QFvalues: TMenuItem
Caption = 'More values ...' Caption = 'More values ...'

View File

@ -333,11 +333,7 @@ type
QueryGrid: TVirtualStringTree; QueryGrid: TVirtualStringTree;
Delete1: TMenuItem; Delete1: TMenuItem;
N6a: TMenuItem; N6a: TMenuItem;
QF1: TMenuItem;
QF2: TMenuItem;
menuQuickFilter: TMenuItem; menuQuickFilter: TMenuItem;
QF3: TMenuItem;
QF4: TMenuItem;
N7: TMenuItem; N7: TMenuItem;
DropFilter1: TMenuItem; DropFilter1: TMenuItem;
PrintList2: TMenuItem; PrintList2: TMenuItem;
@ -345,9 +341,6 @@ type
SynMemoFilter: TSynMemo; SynMemoFilter: TSynMemo;
TimerRefresh: TTimer; TimerRefresh: TTimer;
Saveastextfile1: TMenuItem; Saveastextfile1: TMenuItem;
QF7: TMenuItem;
QF5: TMenuItem;
QF6: TMenuItem;
QF8: TMenuItem; QF8: TMenuItem;
QF10: TMenuItem; QF10: TMenuItem;
QF11: TMenuItem; QF11: TMenuItem;
@ -669,6 +662,20 @@ type
Attach1: TMenuItem; Attach1: TMenuItem;
actSynEditCompletionPropose: TAction; actSynEditCompletionPropose: TAction;
ShowSQLcompletionproposal1: TMenuItem; ShowSQLcompletionproposal1: TMenuItem;
actQuickFilterFocusedValue1: TAction;
actQuickFilterFocusedValue2: TAction;
actQuickFilterFocusedValue3: TAction;
actQuickFilterFocusedValue4: TAction;
actQuickFilterFocusedValue5: TAction;
actQuickFilterFocusedValue6: TAction;
actQuickFilterFocusedValue7: TAction;
menuQuickFilterFocusedValue1: TMenuItem;
menuQuickFilterFocusedValue2: TMenuItem;
menuQuickFilterFocusedValue3: TMenuItem;
menuQuickFilterFocusedValue4: TMenuItem;
menuQuickFilterFocusedValue5: TMenuItem;
menuQuickFilterFocusedValue6: TMenuItem;
menuQuickFilterFocusedValue7: TMenuItem;
procedure actCreateDBObjectExecute(Sender: TObject); procedure actCreateDBObjectExecute(Sender: TObject);
procedure menuConnectionsPopup(Sender: TObject); procedure menuConnectionsPopup(Sender: TObject);
procedure actExitApplicationExecute(Sender: TObject); procedure actExitApplicationExecute(Sender: TObject);
@ -6424,7 +6431,10 @@ var
Item : TMenuItem; Item : TMenuItem;
begin begin
// Set filter for "where..."-clause // Set filter for "where..."-clause
Item := Sender as TMenuItem; if Sender is TAction then
Item := (Sender as TAction).ActionComponent as TMenuItem
else
Item := Sender as TMenuItem;
Filter := ''; Filter := '';
if Item.Tag = 1 then begin if Item.Tag = 1 then begin
@ -6968,13 +6978,13 @@ begin
end; end;
// Block 1: WHERE col IN ([focused cell values]) // Block 1: WHERE col IN ([focused cell values])
QF1.Hint := ''; actQuickFilterFocusedValue1.Hint := '';
QF2.Hint := ''; actQuickFilterFocusedValue2.Hint := '';
QF3.Hint := ''; actQuickFilterFocusedValue3.Hint := '';
QF4.Hint := ''; actQuickFilterFocusedValue4.Hint := '';
QF5.Hint := ''; actQuickFilterFocusedValue5.Hint := '';
QF6.Hint := ''; actQuickFilterFocusedValue6.Hint := '';
QF7.Hint := ''; actQuickFilterFocusedValue7.Hint := '';
Node := Grid.GetFirstSelected; Node := Grid.GetFirstSelected;
HasNullValue := False; HasNullValue := False;
HasNotNullValue := False; HasNotNullValue := False;
@ -6991,55 +7001,55 @@ begin
HasNotNullValue := True; HasNotNullValue := True;
Value := Grid.Text[Node, Grid.FocusedColumn]; Value := Grid.Text[Node, Grid.FocusedColumn];
if IncludedValues.IndexOf(Value) = -1 then begin if IncludedValues.IndexOf(Value) = -1 then begin
QF1.Hint := QF1.Hint + esc(Value) + ', '; actQuickFilterFocusedValue1.Hint := actQuickFilterFocusedValue1.Hint + esc(Value) + ', ';
QF2.Hint := QF2.Hint + esc(Value) + ', '; actQuickFilterFocusedValue2.Hint := actQuickFilterFocusedValue2.Hint + esc(Value) + ', ';
QF5.Hint := QF5.Hint + Col + ' LIKE ''' + esc(Value, True, False) + '%'' OR '; actQuickFilterFocusedValue3.Hint := actQuickFilterFocusedValue3.Hint + Col + ' LIKE ''' + esc(Value, True, False) + '%'' OR ';
QF6.Hint := QF6.Hint + Col + ' LIKE ''%' + esc(Value, True, False) + ''' OR '; actQuickFilterFocusedValue4.Hint := actQuickFilterFocusedValue4.Hint + Col + ' LIKE ''%' + esc(Value, True, False) + ''' OR ';
QF7.Hint := QF7.Hint + Col + ' LIKE ''%' + esc(Value, True, False) + '%'' OR '; actQuickFilterFocusedValue5.Hint := actQuickFilterFocusedValue5.Hint + Col + ' LIKE ''%' + esc(Value, True, False) + '%'' OR ';
QF3.Hint := QF3.Hint + Col + ' > ' + esc(Value) + ' OR '; actQuickFilterFocusedValue6.Hint := actQuickFilterFocusedValue6.Hint + Col + ' > ' + esc(Value) + ' OR ';
QF4.Hint := QF4.Hint + Col + ' < ' + esc(Value) + ' OR '; actQuickFilterFocusedValue7.Hint := actQuickFilterFocusedValue7.Hint + Col + ' < ' + esc(Value) + ' OR ';
IncludedValues.Add(Value); IncludedValues.Add(Value);
end; end;
end; end;
Node := Grid.GetNextSelected(Node); Node := Grid.GetNextSelected(Node);
if Length(QF1.Hint) > SIZE_MB then if Length(actQuickFilterFocusedValue1.Hint) > SIZE_MB then
Break; Break;
end; end;
DataLocalNumberFormat := OldDataLocalNumberFormat; DataLocalNumberFormat := OldDataLocalNumberFormat;
if HasNotNullValue then begin if HasNotNullValue then begin
QF1.Hint := Col + ' IN (' + Copy(QF1.Hint, 1, Length(QF1.Hint)-2) + ')'; actQuickFilterFocusedValue1.Hint := Col + ' IN (' + Copy(actQuickFilterFocusedValue1.Hint, 1, Length(actQuickFilterFocusedValue1.Hint)-2) + ')';
QF2.Hint := Col + ' NOT IN (' + Copy(QF2.Hint, 1, Length(QF2.Hint)-2) + ')'; actQuickFilterFocusedValue2.Hint := Col + ' NOT IN (' + Copy(actQuickFilterFocusedValue2.Hint, 1, Length(actQuickFilterFocusedValue2.Hint)-2) + ')';
QF5.Hint := Copy(QF5.Hint, 1, Length(QF5.Hint)-4); actQuickFilterFocusedValue3.Hint := Copy(actQuickFilterFocusedValue3.Hint, 1, Length(actQuickFilterFocusedValue3.Hint)-4);
QF6.Hint := Copy(QF6.Hint, 1, Length(QF6.Hint)-4); actQuickFilterFocusedValue4.Hint := Copy(actQuickFilterFocusedValue4.Hint, 1, Length(actQuickFilterFocusedValue4.Hint)-4);
QF7.Hint := Copy(QF7.Hint, 1, Length(QF7.Hint)-4); actQuickFilterFocusedValue5.Hint := Copy(actQuickFilterFocusedValue5.Hint, 1, Length(actQuickFilterFocusedValue5.Hint)-4);
QF3.Hint := Copy(QF3.Hint, 1, Length(QF3.Hint)-4); actQuickFilterFocusedValue6.Hint := Copy(actQuickFilterFocusedValue6.Hint, 1, Length(actQuickFilterFocusedValue6.Hint)-4);
QF4.Hint := Copy(QF4.Hint, 1, Length(QF4.Hint)-4); actQuickFilterFocusedValue7.Hint := Copy(actQuickFilterFocusedValue7.Hint, 1, Length(actQuickFilterFocusedValue7.Hint)-4);
end; end;
if HasNullValue then begin if HasNullValue then begin
if HasNotNullValue then begin if HasNotNullValue then begin
QF1.Hint := QF1.Hint + ' OR '; actQuickFilterFocusedValue1.Hint := actQuickFilterFocusedValue1.Hint + ' OR ';
QF2.Hint := QF2.Hint + ' AND '; actQuickFilterFocusedValue2.Hint := actQuickFilterFocusedValue2.Hint + ' AND ';
QF5.Hint := QF5.Hint + ' OR '; actQuickFilterFocusedValue3.Hint := actQuickFilterFocusedValue3.Hint + ' OR ';
QF6.Hint := QF6.Hint + ' OR '; actQuickFilterFocusedValue4.Hint := actQuickFilterFocusedValue4.Hint + ' OR ';
QF7.Hint := QF7.Hint + ' OR '; actQuickFilterFocusedValue5.Hint := actQuickFilterFocusedValue5.Hint + ' OR ';
QF3.Hint := QF3.Hint + ' OR '; actQuickFilterFocusedValue6.Hint := actQuickFilterFocusedValue6.Hint + ' OR ';
QF4.Hint := QF4.Hint + ' OR '; actQuickFilterFocusedValue7.Hint := actQuickFilterFocusedValue7.Hint + ' OR ';
end; end;
QF1.Hint := QF1.Hint + Col + ' IS NULL'; actQuickFilterFocusedValue1.Hint := actQuickFilterFocusedValue1.Hint + Col + ' IS NULL';
QF2.Hint := QF2.Hint + Col + ' IS NOT NULL'; actQuickFilterFocusedValue2.Hint := actQuickFilterFocusedValue2.Hint + Col + ' IS NOT NULL';
QF5.Hint := QF5.Hint + Col + ' IS NULL'; actQuickFilterFocusedValue3.Hint := actQuickFilterFocusedValue3.Hint + Col + ' IS NULL';
QF6.Hint := QF6.Hint + Col + ' IS NULL'; actQuickFilterFocusedValue4.Hint := actQuickFilterFocusedValue4.Hint + Col + ' IS NULL';
QF7.Hint := QF7.Hint + Col + ' IS NULL'; actQuickFilterFocusedValue5.Hint := actQuickFilterFocusedValue5.Hint + Col + ' IS NULL';
QF3.Hint := QF3.Hint + Col + ' IS NULL'; actQuickFilterFocusedValue6.Hint := actQuickFilterFocusedValue6.Hint + Col + ' IS NULL';
QF4.Hint := QF4.Hint + Col + ' IS NULL'; actQuickFilterFocusedValue7.Hint := actQuickFilterFocusedValue7.Hint + Col + ' IS NULL';
end; end;
QF1.Visible := HasNotNullValue or HasNullValue; actQuickFilterFocusedValue1.Visible := HasNotNullValue or HasNullValue;
QF2.Visible := HasNotNullValue or HasNullValue; actQuickFilterFocusedValue2.Visible := HasNotNullValue or HasNullValue;
QF3.Visible := HasNotNullValue; actQuickFilterFocusedValue3.Visible := HasNotNullValue;
QF4.Visible := HasNotNullValue; actQuickFilterFocusedValue4.Visible := HasNotNullValue;
QF5.Visible := HasNotNullValue; actQuickFilterFocusedValue5.Visible := HasNotNullValue;
QF6.Visible := HasNotNullValue; actQuickFilterFocusedValue6.Visible := HasNotNullValue;
QF7.Visible := HasNotNullValue; actQuickFilterFocusedValue7.Visible := HasNotNullValue;
IncludedValues.Free; IncludedValues.Free;
// Block 2: WHERE col = [ask user for value] // Block 2: WHERE col = [ask user for value]
@ -7072,9 +7082,13 @@ begin
for i:=0 to menuQuickFilter.Count-1 do begin for i:=0 to menuQuickFilter.Count-1 do begin
if (menuQuickFilter[i].Caption <> '-') // Not a separator if (menuQuickFilter[i].Caption <> '-') // Not a separator
and (menuQuickFilter[i].Count = 0) // Not a menu with subitems and (menuQuickFilter[i].Count = 0) // Not a menu with subitems
and (menuQuickFilter[i].Action = nil) // Not some special item then begin
then if menuQuickFilter[i].Action = nil then // Not some special item
menuQuickFilter[i].Caption := StrEllipsis(menuQuickFilter[i].Hint, 100); menuQuickFilter[i].Caption := StrEllipsis(menuQuickFilter[i].Hint, 100)
else begin
TAction(menuQuickFilter[i].Action).Caption := StrEllipsis(menuQuickFilter[i].Hint, 100)
end;
end;
end; end;
end; end;