Implement auto-uppercase feature for reserved words, functions and data types in SQL editors. Closes #337.

This commit is contained in:
Ansgar Becker
2018-09-02 13:04:40 +02:00
parent 845533f053
commit 66674ba402
5 changed files with 59 additions and 20 deletions

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: HeidiSQL\n"
"POT-Creation-Date: 2012-11-05 21:40\n"
"PO-Revision-Date: 2018-04-19 07:33+0200\n"
"PO-Revision-Date: 2018-09-02 13:03+0200\n"
"Last-Translator: Ansgar Becker <anse@heidisql.com>\n"
"Language-Team: English (http://www.transifex.com/projects/p/heidisql/language/en/)\n"
"MIME-Version: 1.0\n"
@ -15,7 +15,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Language: en\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 2.0.6\n"
"X-Generator: Poedit 2.1.1\n"
#. AboutBox..Caption
#: about.dfm:5
@ -2705,6 +2705,9 @@ msgstr "Maximum result sets:"
msgid "Enable autocompletion"
msgstr "Enable autocompletion"
msgid "Auto uppercase reserved words and functions"
msgstr "Auto uppercase reserved words and functions"
#. optionsform..pagecontrolMain..tabSQL..chkTabsToSpaces..Caption
#: options.dfm:427
msgid "Tabs to spaces"

View File

@ -168,7 +168,7 @@ type
asConnectCount, asRefusedCount, asSessionCreated, asDoUsageStatistics,
asLastUsageStatisticCall, asWheelZoom, asDisplayBars, asBarColor, asMySQLBinaries, asCustomSnippetsDirectory,
asPromptSaveFileOnTabClose, asWarnUnsafeUpdates, asQueryWarningsMessage,
asCompletionProposal, asCompletionProposalWidth, asCompletionProposalNbLinesInWindow,
asCompletionProposal, asCompletionProposalWidth, asCompletionProposalNbLinesInWindow, asAutoUppercase,
asTabsToSpaces, asFilterPanel, asAllowMultipleInstances, asFindDialogSearchHistory, asGUIFontName, asGUIFontSize,
asFindDialogReplaceHistory, asMaxQueryResults, asLogErrors,
asLogUserSQL, asLogSQL, asLogInfos, asLogDebug, asFieldColorNumeric,
@ -3522,6 +3522,7 @@ begin
InitSetting(asCompletionProposal, 'CompletionProposal', 0, True);
InitSetting(asCompletionProposalWidth, 'CompletionProposalWidth', 350);
InitSetting(asCompletionProposalNbLinesInWindow,'CompletionProposalNbLinesInWindow', 12);
InitSetting(asAutoUppercase, 'AutoUppercase', 0, True);
InitSetting(asTabsToSpaces, 'TabsToSpaces', 0, False);
InitSetting(asFilterPanel, 'FilterPanel', 0, False);
InitSetting(asAllowMultipleInstances, 'AllowMultipleInstances', 0, True);

View File

@ -5879,9 +5879,32 @@ end;
procedure TMainForm.SynMemoQueryStatusChange(Sender: TObject; Changes:
TSynStatusChanges);
var
Editor: TSynMemo;
Token: String;
Attri: TSynHighlighterAttributes;
OldCaretPos: TBufferCoord;
TokenTypeInt, Start: Integer;
begin
ValidateQueryControls(Sender);
UpdateLineCharPanel;
// Uppercase reserved words, functions and data types
if AppSettings.ReadBool(asAutoUppercase) then begin
Editor := Sender as TSynMemo;
Editor.GetHighlighterAttriAtRowColEx(Editor.PrevWordPos, Token, TokenTypeInt, Start, Attri);
if TtkTokenKind(TokenTypeInt) in [tkDatatype, tkFunction, tkKey] then begin
Editor.OnStatusChange := nil; // Don't call StatusChange recursively
OldCaretPos := Editor.CaretXY;
Editor.UndoList.BeginBlock;
Editor.SelStart := Editor.RowColToCharIndex(Editor.PrevWordPos);
Editor.SelEnd := Editor.SelStart + Length(Token);
Editor.SelText := UpperCase(Token);
Editor.CaretXY := OldCaretPos;
Editor.UndoList.EndBlock;
Editor.OnStatusChange := SynMemoQueryStatusChange;
end;
end;
end;

View File

@ -568,12 +568,12 @@ object optionsform: Toptionsform
end
object chkCompletionProposal: TCheckBox
Left = 8
Top = 90
Width = 693
Top = 89
Width = 363
Height = 17
Anchors = [akLeft, akTop, akRight]
Caption = 'Enable autocompletion'
TabOrder = 5
TabOrder = 8
OnClick = Modified
end
object chkTabsToSpaces: TCheckBox
@ -583,7 +583,7 @@ object optionsform: Toptionsform
Height = 17
Anchors = [akLeft, akTop, akRight]
Caption = 'Tabs to spaces'
TabOrder = 6
TabOrder = 5
OnClick = Modified
end
object editSQLTabWidth: TEdit
@ -607,13 +607,13 @@ object optionsform: Toptionsform
object chkAskFileSave: TCheckBox
Left = 8
Top = 113
Width = 693
Width = 363
Height = 17
Anchors = [akLeft, akTop, akRight]
Caption = 'Prompt to save modified files on tab close'
Checked = True
State = cbChecked
TabOrder = 7
TabOrder = 10
OnClick = Modified
end
object editMaxQueryResults: TEdit
@ -621,7 +621,7 @@ object optionsform: Toptionsform
Top = 61
Width = 41
Height = 21
TabOrder = 9
TabOrder = 6
Text = '1'
OnChange = Modified
end
@ -633,7 +633,7 @@ object optionsform: Toptionsform
Associate = editMaxQueryResults
Min = 1
Position = 1
TabOrder = 10
TabOrder = 7
OnChanging = anyUpDownLimitChanging
end
object comboSQLColElement: TComboBox
@ -643,7 +643,7 @@ object optionsform: Toptionsform
Height = 21
Style = csDropDownList
Anchors = [akLeft, akTop, akRight]
TabOrder = 11
TabOrder = 12
OnChange = comboSQLColElementChange
end
object chkSQLBold: TCheckBox
@ -652,7 +652,7 @@ object optionsform: Toptionsform
Width = 130
Height = 17
Caption = 'Bold'
TabOrder = 12
TabOrder = 13
OnClick = SQLFontChange
end
object chkSQLItalic: TCheckBox
@ -662,7 +662,7 @@ object optionsform: Toptionsform
Height = 17
Anchors = [akLeft, akTop, akRight]
Caption = 'Italic'
TabOrder = 13
TabOrder = 14
OnClick = SQLFontChange
end
object cboxSQLColForeground: TColorBox
@ -672,7 +672,7 @@ object optionsform: Toptionsform
Height = 22
Style = [cbStandardColors, cbExtendedColors, cbIncludeNone, cbCustomColor, cbPrettyNames, cbCustomColors]
Anchors = [akTop, akRight]
TabOrder = 14
TabOrder = 15
OnChange = SQLFontChange
end
object cboxSQLColBackground: TColorBox
@ -682,7 +682,7 @@ object optionsform: Toptionsform
Height = 22
Style = [cbStandardColors, cbExtendedColors, cbIncludeNone, cbCustomColor, cbPrettyNames, cbCustomColors]
Anchors = [akTop, akRight]
TabOrder = 15
TabOrder = 16
OnChange = SQLFontChange
end
object SynMemoSQLSample: TSynMemo
@ -690,7 +690,7 @@ object optionsform: Toptionsform
Left = 8
Top = 215
Width = 693
Height = 132
Height = 131
Cursor = crHandPoint
SingleLineMode = False
Anchors = [akLeft, akTop, akRight, akBottom]
@ -699,7 +699,7 @@ object optionsform: Toptionsform
Font.Height = -13
Font.Name = 'Courier New'
Font.Style = []
TabOrder = 16
TabOrder = 17
OnClick = SynMemoSQLSampleClick
CodeFolding.GutterShapeSize = 11
CodeFolding.CollapsedLineColor = clGrayText
@ -730,10 +730,19 @@ object optionsform: Toptionsform
object chkQueryWarningsMessage: TCheckBox
Left = 8
Top = 136
Width = 691
Width = 363
Height = 17
Caption = 'Show query warnings dialog'
TabOrder = 8
TabOrder = 11
OnClick = Modified
end
object chkAutoUppercase: TCheckBox
Left = 377
Top = 89
Width = 320
Height = 17
Caption = 'Auto uppercase reserved words and functions'
TabOrder = 9
OnClick = Modified
end
end

View File

@ -143,6 +143,7 @@ type
cboxRowHighlightSameText: TColorBox;
chkWheelZoom: TCheckBox;
chkQueryWarningsMessage: TCheckBox;
chkAutoUppercase: TCheckBox;
procedure FormShow(Sender: TObject);
procedure Modified(Sender: TObject);
procedure Apply(Sender: TObject);
@ -334,6 +335,7 @@ begin
end;
AppSettings.WriteBool(asCompletionProposal, chkCompletionProposal.Checked);
AppSettings.WriteBool(asAutoUppercase, chkAutoUppercase.Checked);
AppSettings.WriteBool(asTabsToSpaces, chkTabsToSpaces.Checked);
// Shortcuts
@ -519,6 +521,7 @@ begin
updownSQLFontSize.Position := SynMemoSQLSample.Font.Size;
updownSQLTabWidth.Position := SynMemoSQLSample.TabWidth;
chkCompletionProposal.Checked := AppSettings.ReadBool(asCompletionProposal);
chkAutoUppercase.Checked := AppSettings.ReadBool(asAutoUppercase);
chkTabsToSpaces.Checked := AppSettings.ReadBool(asTabsToSpaces);
comboSQLColElementChange(Sender);