IDE: improved Sort Selection dialog layout, bug #21536

git-svn-id: trunk@36291 -
This commit is contained in:
maxim 2012-03-24 16:31:56 +00:00
parent 1707017a5f
commit 7e6f03810d
3 changed files with 697 additions and 170 deletions

1
.gitattributes vendored
View File

@ -4466,6 +4466,7 @@ ide/showcompileropts.lfm svneol=native#text/plain
ide/showcompileropts.pas svneol=native#text/pascal
ide/showdeletingfilesdlg.lfm svneol=native#text/plain
ide/showdeletingfilesdlg.pas svneol=native#text/plain
ide/sortselectiondlg.lfm svneol=native#text/plain
ide/sortselectiondlg.pas svneol=native#text/pascal
ide/sourceeditor.lfm svneol=native#text/plain
ide/sourceeditor.pp svneol=native#text/pascal

624
ide/sortselectiondlg.lfm Normal file
View File

@ -0,0 +1,624 @@
object SortSelectionDialog: TSortSelectionDialog
Left = 217
Height = 378
Top = 141
Width = 493
BorderIcons = [biSystemMenu]
Caption = 'SortSelectionDialog'
ClientHeight = 378
ClientWidth = 493
OnClose = FormClose
OnCreate = FormCreate
Position = poScreenCenter
LCLVersion = '0.9.31'
object PreviewGroupBox: TGroupBox
AnchorSideLeft.Control = Owner
AnchorSideTop.Control = Owner
AnchorSideRight.Control = Owner
AnchorSideRight.Side = asrBottom
AnchorSideBottom.Control = DirectionRadioGroup
Left = 6
Height = 167
Top = 6
Width = 481
Anchors = [akTop, akLeft, akRight, akBottom]
BorderSpacing.Around = 6
Caption = 'PreviewGroupBox'
ClientHeight = 149
ClientWidth = 477
TabOrder = 4
inline PreviewSynEdit: TSynEdit
AnchorSideLeft.Control = PreviewGroupBox
AnchorSideTop.Control = PreviewGroupBox
AnchorSideRight.Control = PreviewGroupBox
AnchorSideRight.Side = asrBottom
AnchorSideBottom.Control = PreviewGroupBox
AnchorSideBottom.Side = asrBottom
Left = 6
Height = 137
Top = 6
Width = 465
BorderSpacing.Around = 6
Anchors = [akTop, akLeft, akRight, akBottom]
Font.Height = -13
Font.Name = 'Courier New'
Font.Pitch = fpFixed
Font.Quality = fqNonAntialiased
ParentColor = False
ParentFont = False
TabOrder = 0
TabStop = False
Gutter.Width = 57
Gutter.MouseActions = <>
RightGutter.Width = 0
RightGutter.MouseActions = <>
Keystrokes = <
item
Command = ecUp
ShortCut = 38
end
item
Command = ecSelUp
ShortCut = 8230
end
item
Command = ecScrollUp
ShortCut = 16422
end
item
Command = ecDown
ShortCut = 40
end
item
Command = ecSelDown
ShortCut = 8232
end
item
Command = ecScrollDown
ShortCut = 16424
end
item
Command = ecLeft
ShortCut = 37
end
item
Command = ecSelLeft
ShortCut = 8229
end
item
Command = ecWordLeft
ShortCut = 16421
end
item
Command = ecSelWordLeft
ShortCut = 24613
end
item
Command = ecRight
ShortCut = 39
end
item
Command = ecSelRight
ShortCut = 8231
end
item
Command = ecWordRight
ShortCut = 16423
end
item
Command = ecSelWordRight
ShortCut = 24615
end
item
Command = ecPageDown
ShortCut = 34
end
item
Command = ecSelPageDown
ShortCut = 8226
end
item
Command = ecPageBottom
ShortCut = 16418
end
item
Command = ecSelPageBottom
ShortCut = 24610
end
item
Command = ecPageUp
ShortCut = 33
end
item
Command = ecSelPageUp
ShortCut = 8225
end
item
Command = ecPageTop
ShortCut = 16417
end
item
Command = ecSelPageTop
ShortCut = 24609
end
item
Command = ecLineStart
ShortCut = 36
end
item
Command = ecSelLineStart
ShortCut = 8228
end
item
Command = ecEditorTop
ShortCut = 16420
end
item
Command = ecSelEditorTop
ShortCut = 24612
end
item
Command = ecLineEnd
ShortCut = 35
end
item
Command = ecSelLineEnd
ShortCut = 8227
end
item
Command = ecEditorBottom
ShortCut = 16419
end
item
Command = ecSelEditorBottom
ShortCut = 24611
end
item
Command = ecToggleMode
ShortCut = 45
end
item
Command = ecCopy
ShortCut = 16429
end
item
Command = ecPaste
ShortCut = 8237
end
item
Command = ecDeleteChar
ShortCut = 46
end
item
Command = ecCut
ShortCut = 8238
end
item
Command = ecDeleteLastChar
ShortCut = 8
end
item
Command = ecDeleteLastChar
ShortCut = 8200
end
item
Command = ecDeleteLastWord
ShortCut = 16392
end
item
Command = ecUndo
ShortCut = 32776
end
item
Command = ecRedo
ShortCut = 40968
end
item
Command = ecLineBreak
ShortCut = 13
end
item
Command = ecSelectAll
ShortCut = 16449
end
item
Command = ecCopy
ShortCut = 16451
end
item
Command = ecBlockIndent
ShortCut = 24649
end
item
Command = ecLineBreak
ShortCut = 16461
end
item
Command = ecInsertLine
ShortCut = 16462
end
item
Command = ecDeleteWord
ShortCut = 16468
end
item
Command = ecBlockUnindent
ShortCut = 24661
end
item
Command = ecPaste
ShortCut = 16470
end
item
Command = ecCut
ShortCut = 16472
end
item
Command = ecDeleteLine
ShortCut = 16473
end
item
Command = ecDeleteEOL
ShortCut = 24665
end
item
Command = ecUndo
ShortCut = 16474
end
item
Command = ecRedo
ShortCut = 24666
end
item
Command = ecGotoMarker0
ShortCut = 16432
end
item
Command = ecGotoMarker1
ShortCut = 16433
end
item
Command = ecGotoMarker2
ShortCut = 16434
end
item
Command = ecGotoMarker3
ShortCut = 16435
end
item
Command = ecGotoMarker4
ShortCut = 16436
end
item
Command = ecGotoMarker5
ShortCut = 16437
end
item
Command = ecGotoMarker6
ShortCut = 16438
end
item
Command = ecGotoMarker7
ShortCut = 16439
end
item
Command = ecGotoMarker8
ShortCut = 16440
end
item
Command = ecGotoMarker9
ShortCut = 16441
end
item
Command = ecSetMarker0
ShortCut = 24624
end
item
Command = ecSetMarker1
ShortCut = 24625
end
item
Command = ecSetMarker2
ShortCut = 24626
end
item
Command = ecSetMarker3
ShortCut = 24627
end
item
Command = ecSetMarker4
ShortCut = 24628
end
item
Command = ecSetMarker5
ShortCut = 24629
end
item
Command = ecSetMarker6
ShortCut = 24630
end
item
Command = ecSetMarker7
ShortCut = 24631
end
item
Command = ecSetMarker8
ShortCut = 24632
end
item
Command = ecSetMarker9
ShortCut = 24633
end
item
Command = EcFoldLevel1
ShortCut = 41009
end
item
Command = EcFoldLevel2
ShortCut = 41010
end
item
Command = EcFoldLevel1
ShortCut = 41011
end
item
Command = EcFoldLevel1
ShortCut = 41012
end
item
Command = EcFoldLevel1
ShortCut = 41013
end
item
Command = EcFoldLevel6
ShortCut = 41014
end
item
Command = EcFoldLevel7
ShortCut = 41015
end
item
Command = EcFoldLevel8
ShortCut = 41016
end
item
Command = EcFoldLevel9
ShortCut = 41017
end
item
Command = EcFoldLevel0
ShortCut = 41008
end
item
Command = EcFoldCurrent
ShortCut = 41005
end
item
Command = EcUnFoldCurrent
ShortCut = 41003
end
item
Command = EcToggleMarkupWord
ShortCut = 32845
end
item
Command = ecNormalSelect
ShortCut = 24654
end
item
Command = ecColumnSelect
ShortCut = 24643
end
item
Command = ecLineSelect
ShortCut = 24652
end
item
Command = ecTab
ShortCut = 9
end
item
Command = ecShiftTab
ShortCut = 8201
end
item
Command = ecMatchBracket
ShortCut = 24642
end
item
Command = ecColSelUp
ShortCut = 40998
end
item
Command = ecColSelDown
ShortCut = 41000
end
item
Command = ecColSelLeft
ShortCut = 40997
end
item
Command = ecColSelRight
ShortCut = 40999
end
item
Command = ecColSelPageDown
ShortCut = 40994
end
item
Command = ecColSelPageBottom
ShortCut = 57378
end
item
Command = ecColSelPageUp
ShortCut = 40993
end
item
Command = ecColSelPageTop
ShortCut = 57377
end
item
Command = ecColSelLineStart
ShortCut = 40996
end
item
Command = ecColSelLineEnd
ShortCut = 40995
end
item
Command = ecColSelEditorTop
ShortCut = 57380
end
item
Command = ecColSelEditorBottom
ShortCut = 57379
end>
MouseActions = <>
MouseSelActions = <>
Lines.Strings = (
''
)
VisibleSpecialChars = [vscSpace, vscTabAtLast]
ReadOnly = True
BracketHighlightStyle = sbhsBoth
BracketMatchColor.Background = clNone
BracketMatchColor.Foreground = clNone
BracketMatchColor.Style = [fsBold]
FoldedCodeColor.Background = clNone
FoldedCodeColor.Foreground = clGray
FoldedCodeColor.FrameColor = clGray
MouseLinkColor.Background = clNone
MouseLinkColor.Foreground = clBlue
LineHighlightColor.Background = clNone
LineHighlightColor.Foreground = clNone
inline SynLeftGutterPartList1: TSynGutterPartList
object SynGutterMarks1: TSynGutterMarks
Width = 24
MouseActions = <>
end
object SynGutterLineNumber1: TSynGutterLineNumber
Width = 17
MouseActions = <>
MarkupInfo.Background = clBtnFace
MarkupInfo.Foreground = clNone
DigitCount = 2
ShowOnlyLineNumbersMultiplesOf = 1
ZeroStart = False
LeadingZeros = False
end
object SynGutterChanges1: TSynGutterChanges
Width = 4
MouseActions = <>
ModifiedColor = 59900
SavedColor = clGreen
end
object SynGutterSeparator1: TSynGutterSeparator
Width = 2
MouseActions = <>
end
object SynGutterCodeFolding1: TSynGutterCodeFolding
MouseActions = <>
MarkupInfo.Background = clNone
MarkupInfo.Foreground = clGray
MouseActionsExpanded = <>
MouseActionsCollapsed = <>
end
end
end
end
object DirectionRadioGroup: TRadioGroup
AnchorSideLeft.Control = Owner
AnchorSideRight.Control = Owner
AnchorSideRight.Side = asrBottom
AnchorSideBottom.Control = DomainRadioGroup
Left = 6
Height = 52
Top = 179
Width = 481
Anchors = [akLeft, akRight, akBottom]
AutoFill = True
AutoSize = True
BorderSpacing.Around = 6
Caption = 'DirectionRadioGroup'
ChildSizing.LeftRightSpacing = 6
ChildSizing.TopBottomSpacing = 6
ChildSizing.EnlargeHorizontal = crsHomogenousChildResize
ChildSizing.EnlargeVertical = crsHomogenousChildResize
ChildSizing.ShrinkHorizontal = crsScaleChilds
ChildSizing.ShrinkVertical = crsScaleChilds
ChildSizing.Layout = cclLeftToRightThenTopToBottom
ChildSizing.ControlsPerLine = 2
Columns = 2
OnClick = DirectionRadioGroupClick
TabOrder = 1
end
object DomainRadioGroup: TRadioGroup
AnchorSideLeft.Control = Owner
AnchorSideRight.Control = Owner
AnchorSideRight.Side = asrBottom
AnchorSideBottom.Control = OptionsCheckGroup
Left = 6
Height = 45
Top = 237
Width = 481
Anchors = [akLeft, akRight, akBottom]
AutoFill = True
AutoSize = True
BorderSpacing.Around = 6
Caption = 'DomainRadioGroup'
ChildSizing.LeftRightSpacing = 6
ChildSizing.TopBottomSpacing = 6
ChildSizing.EnlargeHorizontal = crsHomogenousChildResize
ChildSizing.EnlargeVertical = crsHomogenousChildResize
ChildSizing.ShrinkHorizontal = crsScaleChilds
ChildSizing.ShrinkVertical = crsScaleChilds
ChildSizing.Layout = cclLeftToRightThenTopToBottom
ChildSizing.ControlsPerLine = 3
Columns = 3
OnClick = DomainRadioGroupClick
TabOrder = 2
end
object OptionsCheckGroup: TCheckGroup
AnchorSideLeft.Control = Owner
AnchorSideRight.Control = Owner
AnchorSideRight.Side = asrBottom
AnchorSideBottom.Control = ButtonPanel
Left = 6
Height = 52
Top = 288
Width = 481
Anchors = [akLeft, akRight, akBottom]
AutoFill = True
AutoSize = True
BorderSpacing.Around = 6
Caption = 'OptionsCheckGroup'
ChildSizing.LeftRightSpacing = 6
ChildSizing.TopBottomSpacing = 6
ChildSizing.EnlargeHorizontal = crsHomogenousChildResize
ChildSizing.EnlargeVertical = crsHomogenousChildResize
ChildSizing.ShrinkHorizontal = crsScaleChilds
ChildSizing.ShrinkVertical = crsScaleChilds
ChildSizing.Layout = cclLeftToRightThenTopToBottom
ChildSizing.ControlsPerLine = 2
Columns = 2
OnItemClick = OptionsCheckGroupItemClick
TabOrder = 3
end
object ButtonPanel: TButtonPanel
Left = 6
Height = 26
Top = 346
Width = 481
OKButton.Name = 'OKButton'
OKButton.DefaultCaption = True
HelpButton.Name = 'HelpButton'
HelpButton.DefaultCaption = True
CloseButton.Name = 'CloseButton'
CloseButton.DefaultCaption = True
CancelButton.Name = 'CancelButton'
CancelButton.DefaultCaption = True
TabOrder = 0
ShowButtons = [pbOK, pbCancel]
ShowBevel = False
end
end

View File

@ -40,7 +40,7 @@ interface
uses
Classes, SysUtils, LCLProc, Forms, Controls, SynEdit, Buttons, StdCtrls,
ExtCtrls, IDEOptionDefs, Dialogs, BasicCodeTools, Graphics,
ExtCtrls, IDEOptionDefs, Dialogs, BasicCodeTools, Graphics, ButtonPanel,
AVL_Tree, TextTools, IDEWindowIntf,
LazarusIDEStrConsts, EditorOptions, MiscOptions, SynEditHighlighter;
@ -48,20 +48,20 @@ type
TSortSelDlgState = (ssdPreviewNeedsUpdate, ssdSortedTextNeedsUpdate);
TSortSelDlgStates = set of TSortSelDlgState;
{ TSortSelectionDialog }
TSortSelectionDialog = class(TForm)
ButtonPanel: TButtonPanel;
OptionsCheckGroup: TCheckGroup;
PreviewGroupBox: TGroupBox;
PreviewSynEdit: TSynEdit;
DirectionRadioGroup: TRadioGroup;
DomainRadioGroup: TRadioGroup;
OptionsCheckGroup: TCheckGroup;
OkButton: TButton;
CancelButton: TButton;
procedure DirectionRadioGroupClick(Sender: TObject);
procedure DomainRadioGroupClick(Sender: TObject);
procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
procedure FormCreate(Sender: TObject);
procedure OptionsCheckGroupItemClick(Sender: TObject; Index: integer);
procedure SortSelectionDialogClose(Sender: TObject;
var CloseAction: TCloseAction);
procedure SortSelectionDialogResize(Sender: TObject);
private
FCaseSensitive: boolean;
FDirection: TSortDirection;
@ -78,7 +78,6 @@ type
procedure SetIgnoreSpace(const AValue: boolean);
procedure SetTheText(const AValue: string);
public
constructor Create(TheOwner: TComponent); override;
procedure BeginUpdate;
procedure EndUpdate;
procedure UpdatePreview;
@ -99,6 +98,8 @@ function SortText(const TheText: string; Direction: TSortDirection;
implementation
{$R *.lfm}
function ShowSortSelectionDialog(const TheText: string;
Highlighter: TSynCustomHighlighter;
var SortedText: string): TModalResult;
@ -322,36 +323,6 @@ end;
{ TSortSelectionDialog }
procedure TSortSelectionDialog.SortSelectionDialogResize(Sender: TObject);
begin
with PreviewGroupBox do
SetBounds(Left,Top,Self.ClientWidth-2*Left,Self.ClientHeight-Top-110);
with DirectionRadioGroup do
SetBounds(Left,PreviewGroupBox.Top+PreviewGroupBox.Height+5,
((Self.ClientWidth-5) div 2)-Left,Height);
with DomainRadioGroup do
SetBounds(DirectionRadioGroup.Left+DirectionRadioGroup.Width+5,
DirectionRadioGroup.Top,
DirectionRadioGroup.Width,DirectionRadioGroup.Height);
with OptionsCheckGroup do
SetBounds(DirectionRadioGroup.Left,
DirectionRadioGroup.Top+DirectionRadioGroup.Height+5,
DirectionRadioGroup.Width,DirectionRadioGroup.Height);
with OkButton do begin
Left:=Self.ClientWidth-200;
Top:=Self.ClientHeight-35;
end;
with CancelButton do begin
Left:=Self.ClientWidth-100;
Top:=OkButton.Top;
end;
end;
procedure TSortSelectionDialog.DirectionRadioGroupClick(Sender: TObject);
begin
if DirectionRadioGroup.ItemIndex=0 then
@ -371,6 +342,69 @@ begin
end;
end;
procedure TSortSelectionDialog.FormClose(Sender: TObject; var CloseAction:
TCloseAction);
begin
MiscellaneousOptions.SortSelDirection:=Direction;
MiscellaneousOptions.SortSelDomain:=Domain;
MiscellaneousOptions.Save;
end;
procedure TSortSelectionDialog.FormCreate(Sender: TObject);
begin
FIgnoreSpace:=true;
FDirection:=MiscellaneousOptions.SortSelDirection;
FDomain:=MiscellaneousOptions.SortSelDomain;
FStates:=FStates+[ssdPreviewNeedsUpdate,ssdSortedTextNeedsUpdate];
IDEDialogLayoutList.ApplyLayout(Self,600,450);
Caption:=lisSortSelSortSelection;
PreviewGroupBox.Caption:=lisSortSelPreview;
with DirectionRadioGroup do begin
Caption:=dlgDirection;
with Items do begin
BeginUpdate;
Add(lisSortSelAscending);
Add(lisSortSelDescending);
case FDirection of
sdAscending: ItemIndex:=0;
else ItemIndex:=1;
end;
EndUpdate;
end;
end;
with DomainRadioGroup do begin
Caption:=lisSortSelDomain;
with Items do begin
BeginUpdate;
Add(lisSortSelLines);
Add(lisSortSelWords);
Add(lisSortSelParagraphs);
case FDomain of
sdLines: ItemIndex:=0;
sdWords: ItemIndex:=1;
else ItemIndex:=2;
end;
EndUpdate;
end;
end;
with OptionsCheckGroup do begin
Caption:=lisSortSelOptions;
with Items do begin
BeginUpdate;
Add(lisSortSelCaseSensitive);
Add(lisSortSelIgnoreSpace);
EndUpdate;
end;
end;
ButtonPanel.OKButton.Caption:=lisSortSelSort;
end;
procedure TSortSelectionDialog.OptionsCheckGroupItemClick(Sender: TObject;
Index: integer);
begin
@ -380,14 +414,6 @@ begin
end;
end;
procedure TSortSelectionDialog.SortSelectionDialogClose(Sender: TObject;
var CloseAction: TCloseAction);
begin
MiscellaneousOptions.SortSelDirection:=Direction;
MiscellaneousOptions.SortSelDomain:=Domain;
MiscellaneousOptions.Save;
end;
procedure TSortSelectionDialog.SetDirection(const AValue: TSortDirection);
begin
if FDirection=AValue then exit;
@ -441,130 +467,6 @@ begin
UpdatePreview;
end;
constructor TSortSelectionDialog.Create(TheOwner: TComponent);
begin
inherited CreateNew(TheOwner, 1);
FIgnoreSpace:=true;
FDirection:=MiscellaneousOptions.SortSelDirection;
FDomain:=MiscellaneousOptions.SortSelDomain;
FStates:=FStates+[ssdPreviewNeedsUpdate,ssdSortedTextNeedsUpdate];
Position:=poScreenCenter;
IDEDialogLayoutList.ApplyLayout(Self,600,400);
Caption:=lisSortSelSortSelection;
PreviewGroupBox:=TGroupBox.Create(Self);
with PreviewGroupBox do begin
Name:='PreviewGroupBox';
Parent:=Self;
BorderSpacing.Around:=5;
Align:=alTop;
Height:=Self.ClientHeight-Top-140;
Caption:=lisSortSelPreview;
end;
PreviewSynEdit:=TSynEdit.Create(Self);
with PreviewSynEdit do begin
Name:='PreviewSynEdit';
Parent:=PreviewGroupBox;
Align:=alClient;
ReadOnly:=true;
end;
DirectionRadioGroup:=TRadioGroup.Create(Self);
with DirectionRadioGroup do begin
Name:='DirectionRadioGroup';
Parent:=Self;
Left:=5;
Top:=PreviewGroupBox.Top+PreviewGroupBox.Height+5;
Width:=((Self.ClientWidth-5) div 2)-Left;
Height:=45;
Caption:=dlgDirection;
with Items do begin
BeginUpdate;
Add(lisSortSelAscending);
Add(lisSortSelDescending);
Columns:=2;
case FDirection of
sdAscending: ItemIndex:=0;
else ItemIndex:=1;
end;
EndUpdate;
end;
OnClick:=@DirectionRadioGroupClick;
end;
DomainRadioGroup:=TRadioGroup.Create(Self);
with DomainRadioGroup do begin
Name:='DomainRadioGroup';
Parent:=Self;
Left:=DirectionRadioGroup.Left+DirectionRadioGroup.Width+5;
Top:=DirectionRadioGroup.Top;
Width:=DirectionRadioGroup.Width;
Height:=DirectionRadioGroup.Height;
Caption:=lisSortSelDomain;
with Items do begin
BeginUpdate;
Add(lisSortSelLines);
Add(lisSortSelWords);
Add(lisSortSelParagraphs);
case FDomain of
sdLines: ItemIndex:=0;
sdWords: ItemIndex:=1;
else ItemIndex:=2;
end;
Columns:=3;
EndUpdate;
end;
OnClick:=@DomainRadioGroupClick;
end;
OptionsCheckGroup:=TCheckGroup.Create(Self);
with OptionsCheckGroup do begin
Name:='OptionsCheckGroup';
Parent:=Self;
Left:=DirectionRadioGroup.Left;
Top:=DirectionRadioGroup.Top+DirectionRadioGroup.Height+5;
Width:=DirectionRadioGroup.Width;
Height:=DirectionRadioGroup.Height;
Columns:=2;
Caption:=lisSortSelOptions;
with Items do begin
BeginUpdate;
Add(lisSortSelCaseSensitive);
Add(lisSortSelIgnoreSpace);
EndUpdate;
end;
OnItemClick:=@OptionsCheckGroupItemClick;
end;
OkButton:=TButton.Create(Self);
with OkButton do begin
Name:='OkButton';
Parent:=Self;
Left:=Self.ClientWidth-200;
Top:=Self.ClientHeight-35;
Caption:=lisSortSelSort;
ModalResult:=mrOk;
Default:=true;
end;
CancelButton:=TButton.Create(Self);
with CancelButton do begin
Name:='CancelButton';
Parent:=Self;
Left:=Self.ClientWidth-100;
Top:=OkButton.Top;
Caption:=lisCancel;
ModalResult:=mrCancel;
Cancel:=true;
end;
OnResize:=@SortSelectionDialogResize;
OnClose:=@SortSelectionDialogClose;
OnResize(Self);
end;
procedure TSortSelectionDialog.BeginUpdate;
begin
inc(FUpdateCount);