From 02c77e92db93912660d6fbf8858061ec92fe9295 Mon Sep 17 00:00:00 2001 From: alexs75 Date: Thu, 10 Dec 2009 22:02:14 +0000 Subject: [PATCH] CaseInsensetive sort in RxDBGrid git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@1042 8e941d3f-bd1b-0410-a28a-d453659cc2b4 --- components/rx/exsortfb.pas | 17 ++- components/rx/languages/rxdconst.es.po | 8 +- components/rx/languages/rxdconst.po | 6 +- components/rx/languages/rxdconst.ru.po | 8 +- components/rx/rxdbgrid.pas | 74 +++++++---- components/rx/rxdconst.pas | 3 +- components/rx/rxsortby.lfm | 67 ++++++---- components/rx/rxsortby.lrs | 170 +++++++++++++------------ components/rx/rxsortby.pas | 2 + components/rx/rxsortmemds.pas | 11 +- 10 files changed, 217 insertions(+), 149 deletions(-) diff --git a/components/rx/exsortfb.pas b/components/rx/exsortfb.pas index 7d5770757..232666f7d 100644 --- a/components/rx/exsortfb.pas +++ b/components/rx/exsortfb.pas @@ -35,22 +35,29 @@ unit exsortfb; interface uses - Classes, SysUtils, DB, RxDBGrid; + Classes, SysUtils, DB, + {$IFDEF FPC} + RxDBGrid + {$ELSE} + exDBGrid + {$ENDIF} + ; type { TFBDataSetSortEngine } - TFBDataSetSortEngine = class(TExDBGridSortEngine) + TFBDataSetSortEngine = class(TRxDBGridSortEngine) public - procedure Sort(Field:TField; ADataSet:TDataSet; Asc:boolean);override; + procedure Sort(Field:TField; ADataSet:TDataSet; Asc:boolean; SortOptions:TRxSortEngineOptions);override; procedure SortList(ListField:string; ADataSet:TDataSet; Asc:boolean);override; end; implementation uses FBCustomDataSet; -procedure TFBDataSetSortEngine.Sort(Field:TField; ADataSet:TDataSet; Asc:boolean); +procedure TFBDataSetSortEngine.Sort(Field: TField; ADataSet: TDataSet; + Asc: boolean; SortOptions: TRxSortEngineOptions); begin if Assigned(ADataSet) then (ADataSet as TFBDataSet).SortOnField(Field.FieldName, Asc); @@ -64,6 +71,6 @@ begin end; initialization - RegisterExDBGridSortEngine(TFBDataSetSortEngine, TFBDataSet); + RegisterRxDBGridSortEngine(TFBDataSetSortEngine, TFBDataSet); end. diff --git a/components/rx/languages/rxdconst.es.po b/components/rx/languages/rxdconst.es.po index 46afdd713..d26a091a0 100644 --- a/components/rx/languages/rxdconst.es.po +++ b/components/rx/languages/rxdconst.es.po @@ -361,6 +361,10 @@ msgstr "&Orden de Ordenamiento :" msgid "Sort on field" msgstr "Ordenar por Columnas" +#: rxdconst.srxsortbyformcaseinsens +msgid "&Case insensitive sort" +msgstr "" + #: rxdconst.srxsortbyformmovednfield msgid "&Down" msgstr "A&bajo" @@ -378,7 +382,9 @@ msgid "&Selected fields:" msgstr "&Campos Disponibles :" #: rxdconst.srxsortbyformsortorder -msgid "Select field for sort data:" +#, fuzzy +#| msgid "Select field for sort data:" +msgid "Select f&ield for sort data:" msgstr "Seleccionar Dirección de Ordenamiento :" #: rxdconst.srxsoursedataset diff --git a/components/rx/languages/rxdconst.po b/components/rx/languages/rxdconst.po index ea0dd216b..a03f9d905 100644 --- a/components/rx/languages/rxdconst.po +++ b/components/rx/languages/rxdconst.po @@ -361,6 +361,10 @@ msgstr "" msgid "Sort on field" msgstr "" +#: rxdconst.srxsortbyformcaseinsens +msgid "&Case insensitive sort" +msgstr "" + #: rxdconst.srxsortbyformmovednfield msgid "&Down" msgstr "" @@ -378,7 +382,7 @@ msgid "&Selected fields:" msgstr "" #: rxdconst.srxsortbyformsortorder -msgid "Select field for sort data:" +msgid "Select f&ield for sort data:" msgstr "" #: rxdconst.srxsoursedataset diff --git a/components/rx/languages/rxdconst.ru.po b/components/rx/languages/rxdconst.ru.po index 6a2f6120e..752292f7c 100644 --- a/components/rx/languages/rxdconst.ru.po +++ b/components/rx/languages/rxdconst.ru.po @@ -361,6 +361,10 @@ msgstr "&Поля в таблице" msgid "Sort on field" msgstr "Сортировать по полям" +#: rxdconst.srxsortbyformcaseinsens +msgid "&Case insensitive sort" +msgstr "&Сортировка без учёта регистра" + #: rxdconst.srxsortbyformmovednfield msgid "&Down" msgstr "&Вниз" @@ -378,7 +382,9 @@ msgid "&Selected fields:" msgstr "&Выбранные поля" #: rxdconst.srxsortbyformsortorder -msgid "Select field for sort data:" +#, fuzzy +#| msgid "Select field for sort data:" +msgid "Select f&ield for sort data:" msgstr "Укажите поля для сортировки данных :" #: rxdconst.srxsoursedataset diff --git a/components/rx/rxdbgrid.pas b/components/rx/rxdbgrid.pas index fb62654bf..3daa77384 100644 --- a/components/rx/rxdbgrid.pas +++ b/components/rx/rxdbgrid.pas @@ -44,7 +44,8 @@ type rdgAllowQuickSearch, rdgAllowFilterForm, rdgAllowSortForm, - rdgAllowToolMenu + rdgAllowToolMenu, + rdgCaseInsensitiveSort ); TOptionsRx = set of TOptionRx; @@ -55,17 +56,20 @@ type TRxColumn = class; - { TExDBGridSortEngine } + { TRxDBGridSortEngine } + TRxSortEngineOption = + (seoCaseInsensitiveSort); + TRxSortEngineOptions = set of TRxSortEngineOption; - TExDBGridSortEngine = class + TRxDBGridSortEngine = class private FDataSetClass:TDataSetClass; public - procedure Sort(Field:TField; ADataSet:TDataSet; Asc:boolean);virtual;abstract; + procedure Sort(Field:TField; ADataSet:TDataSet; Asc:boolean; SortOptions:TRxSortEngineOptions);virtual;abstract; procedure SortList(ListField:string; ADataSet:TDataSet; Asc:boolean);virtual; end; - TExDBGridSortEngineClass = class of TExDBGridSortEngine; + TRxDBGridSortEngineClass = class of TRxDBGridSortEngine; TMLCaptionItem = class Caption:string; @@ -244,7 +248,7 @@ type //auto sort support FSortField:TField; FSortOrder:TSortMarker; - FSortEngine:TExDBGridSortEngine; + FSortEngine:TRxDBGridSortEngine; FPressedCol: TColumn; FPressed: Boolean; FSwapButtons: Boolean; @@ -303,6 +307,8 @@ type procedure OutCaptionSortMarker(const aRect: TRect; ASortMarker: TSortMarker); procedure OutCaptionMLCellText(aCol,aRow: Integer; aRect: TRect; aState: TGridDrawState; MLI:TMLCaptionItem); procedure UpdateJMenuStates; + function SortEngineOptions:TRxSortEngineOptions; + //storage procedure OnIniSave(Sender: TObject); @@ -480,25 +486,25 @@ type property OnDisplayLookup: TDisplayLookup read F_DisplayLookup write F_DisplayLookup; end; -procedure RegisterExDBGridSortEngine(ExDBGridSortEngineClass:TExDBGridSortEngineClass; DataSetClass:TDataSetClass); +procedure RegisterRxDBGridSortEngine(RxDBGridSortEngineClass:TRxDBGridSortEngineClass; DataSetClass:TDataSetClass); implementation uses Math, rxdconst, rxstrutils, rxdbgrid_findunit, rxdbgrid_columsunit, rxlookup, tooledit, LCLProc, rxfilterby, rxsortby; var - ExDBGridSortEngineList:TStringList; + RxDBGridSortEngineList:TStringList; -procedure RegisterExDBGridSortEngine(ExDBGridSortEngineClass:TExDBGridSortEngineClass; DataSetClass:TDataSetClass); +procedure RegisterRxDBGridSortEngine(RxDBGridSortEngineClass:TRxDBGridSortEngineClass; DataSetClass:TDataSetClass); var Pos:integer; - ExDBGridSortEngine:TExDBGridSortEngine; + RxDBGridSortEngine:TRxDBGridSortEngine; begin - if not ExDBGridSortEngineList.Find(DataSetClass.ClassName, Pos) then + if not RxDBGridSortEngineList.Find(DataSetClass.ClassName, Pos) then begin - ExDBGridSortEngine:=ExDBGridSortEngineClass.Create; - ExDBGridSortEngine.FDataSetClass:=DataSetClass; - ExDBGridSortEngineList.AddObject(DataSetClass.ClassName, ExDBGridSortEngine); + RxDBGridSortEngine:=RxDBGridSortEngineClass.Create; + RxDBGridSortEngine.FDataSetClass:=DataSetClass; + RxDBGridSortEngineList.AddObject(DataSetClass.ClassName, RxDBGridSortEngine); end end; @@ -856,8 +862,8 @@ begin if Assigned(DataSource) and Assigned(DataSource.DataSet) and DataSource.DataSet.Active then begin S:=DataSource.DataSet.ClassName; - if ExDBGridSortEngineList.Find(S, Pos) then - FSortEngine:=ExDBGridSortEngineList.Objects[Pos] as TExDBGridSortEngine + if RxDBGridSortEngineList.Find(S, Pos) then + FSortEngine:=RxDBGridSortEngineList.Objects[Pos] as TRxDBGridSortEngine else FSortEngine:=nil; FSortField:=nil; @@ -1221,6 +1227,13 @@ begin F_PopupMenu.Items[6].Enabled:=rdgAllowColumnsForm in FOptionsRx; end; +function TRxDBGrid.SortEngineOptions: TRxSortEngineOptions; +begin + Result:=[]; + if rdgCaseInsensitiveSort in FOptionsRx then + Include(Result, seoCaseInsensitiveSort); +end; + procedure TRxDBGrid.OnIniSave(Sender: TObject); var i:integer; @@ -1287,7 +1300,7 @@ begin begin FSortField:=DataSource.DataSet.FindField(ColumName); if Assigned(FSortField) then - FSortEngine.Sort(FSortField, DataSource.DataSet, FSortOrder=smUp); + FSortEngine.Sort(FSortField, DataSource.DataSet, FSortOrder=smUp, SortEngineOptions); end; end end; @@ -1605,8 +1618,8 @@ begin if Value then begin S:=DataSource.DataSet.ClassName; - if ExDBGridSortEngineList.Find(S, Pos) then - FSortEngine:=ExDBGridSortEngineList.Objects[Pos] as TExDBGridSortEngine + if RxDBGridSortEngineList.Find(S, Pos) then + FSortEngine:=RxDBGridSortEngineList.Objects[Pos] as TRxDBGridSortEngine else FSortEngine:=nil; end @@ -1743,7 +1756,7 @@ begin FSortField:=AField; FSortOrder:=smUp; end; - FSortEngine.Sort(FSortField, DataSource.DataSet, FSortOrder=smUp); + FSortEngine.Sort(FSortField, DataSource.DataSet, FSortOrder=smUp, SortEngineOptions); end; // if Assigned(FOnTitleBtnClick) then FOnTitleBtnClick(Self, ACol, AField); end; @@ -2566,6 +2579,7 @@ begin begin FSortField:=nil; rxSortByForm:=TrxSortByForm.Create(Application); + rxSortByForm.CheckBox1.Checked:=rdgCaseInsensitiveSort in FOptionsRx; o:=not (FSortOrder=smDown); if rxSortByForm.Execute(DataSource.DataSet,F_SortListField,o) then begin @@ -2578,6 +2592,12 @@ begin FSortOrder:=smUp else FSortOrder:=smDown; + + if rxSortByForm.CheckBox1.Checked then + Include(FOptionsRx, rdgCaseInsensitiveSort) + else + Exclude(FOptionsRx, rdgCaseInsensitiveSort); + FSortEngine.SortList(s, DataSource.DataSet, o); end; FreeAndNil(rxSortByForm); @@ -3332,7 +3352,7 @@ end; { TExDBGridSortEngine } -procedure TExDBGridSortEngine.SortList(ListField: string; ADataSet: TDataSet; +procedure TRxDBGridSortEngine.SortList(ListField: string; ADataSet: TDataSet; Asc: boolean); begin @@ -3342,14 +3362,14 @@ initialization {$I rxdbgrid.lrs} // {$I rx_markerdown.lrs} - ExDBGridSortEngineList:=TStringList.Create; - ExDBGridSortEngineList.Sorted:=true; + RxDBGridSortEngineList:=TStringList.Create; + RxDBGridSortEngineList.Sorted:=true; finalization - while (ExDBGridSortEngineList.Count>0) do + while (RxDBGridSortEngineList.Count>0) do begin - ExDBGridSortEngineList.Objects[0].Free; - ExDBGridSortEngineList.Delete(0); + RxDBGridSortEngineList.Objects[0].Free; + RxDBGridSortEngineList.Delete(0); end; - ExDBGridSortEngineList.Free; + RxDBGridSortEngineList.Free; end. diff --git a/components/rx/rxdconst.pas b/components/rx/rxdconst.pas index 449409b98..4c8cbf42a 100644 --- a/components/rx/rxdconst.pas +++ b/components/rx/rxdconst.pas @@ -103,11 +103,12 @@ resourcestring sRxSortByFormCaption = 'Sort on field'; sRxSortByFormAllFields = '&Fields in dataset:'; sRxSortByFormSortFields = '&Selected fields:'; - sRxSortByFormSortOrder = 'Select field for sort data:'; + sRxSortByFormSortOrder = 'Select f&ield for sort data:'; sRxSortByFormAddField = '&Add field'; sRxSortByFormRemoveField = '&Remove'; sRxSortByFormMoveUpField = '&Up'; sRxSortByFormMoveDnField = '&Down'; + sRxSortByFormCaseInsens = '&Case insensitive sort'; //TRxMemoryData SMemNoRecords = 'No data found'; diff --git a/components/rx/rxsortby.lfm b/components/rx/rxsortby.lfm index c3ee34292..f5c4f1073 100644 --- a/components/rx/rxsortby.lfm +++ b/components/rx/rxsortby.lfm @@ -1,16 +1,16 @@ object rxSortByForm: TrxSortByForm Left = 450 - Height = 337 - Top = 270 - Width = 583 + Height = 411 + Top = 243 + Width = 684 ActiveControl = AddBtn Caption = 'Sort by fields' - ClientHeight = 337 - ClientWidth = 583 + ClientHeight = 411 + ClientWidth = 684 OnClose = FormClose OnCreate = FormCreate Position = poScreenCenter - LCLVersion = '0.9.27' + LCLVersion = '0.9.29' object Label1: TLabel AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner @@ -27,7 +27,7 @@ object rxSortByForm: TrxSortByForm AnchorSideLeft.Control = AddBtn AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = Owner - Left = 352 + Left = 423 Height = 18 Top = 6 Width = 75 @@ -42,7 +42,7 @@ object rxSortByForm: TrxSortByForm AnchorSideBottom.Side = asrBottom Left = 6 Height = 18 - Top = 265 + Top = 316 Width = 116 Anchors = [akLeft, akBottom] BorderSpacing.Left = 6 @@ -58,10 +58,10 @@ object rxSortByForm: TrxSortByForm AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = ComboBox1 - Left = 352 - Height = 216 + Left = 423 + Height = 267 Top = 30 - Width = 225 + Width = 255 Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Around = 6 ItemHeight = 0 @@ -75,7 +75,7 @@ object rxSortByForm: TrxSortByForm AnchorSideTop.Side = asrBottom AnchorSideRight.Control = AddBtn AnchorSideRight.Side = asrBottom - Left = 197 + Left = 268 Height = 35 Top = 71 Width = 149 @@ -109,7 +109,7 @@ object rxSortByForm: TrxSortByForm AnchorSideTop.Side = asrBottom AnchorSideRight.Control = AddBtn AnchorSideRight.Side = asrBottom - Left = 197 + Left = 268 Height = 36 Top = 112 Width = 149 @@ -142,7 +142,7 @@ object rxSortByForm: TrxSortByForm AnchorSideTop.Side = asrBottom AnchorSideRight.Control = AddBtn AnchorSideRight.Side = asrBottom - Left = 197 + Left = 268 Height = 36 Top = 154 Width = 149 @@ -174,11 +174,11 @@ object rxSortByForm: TrxSortByForm AnchorSideLeft.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom - AnchorSideBottom.Control = ButtonPanel1 + AnchorSideBottom.Control = CheckBox1 Left = 128 Height = 31 - Top = 252 - Width = 449 + Top = 303 + Width = 550 Anchors = [akLeft, akRight, akBottom] BorderSpacing.Around = 6 ItemHeight = 0 @@ -189,12 +189,13 @@ object rxSortByForm: TrxSortByForm AnchorSideLeft.Control = Owner AnchorSideTop.Control = Label1 AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = AddBtn AnchorSideBottom.Control = ComboBox1 Left = 6 - Height = 216 + Height = 267 Top = 30 - Width = 185 - Anchors = [akTop, akLeft, akBottom] + Width = 256 + Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Around = 6 ItemHeight = 0 OnDblClick = ListBox1DblClick @@ -202,10 +203,10 @@ object rxSortByForm: TrxSortByForm TopIndex = -1 end object AddBtn: TBitBtn - AnchorSideLeft.Control = ListBox1 - AnchorSideLeft.Side = asrBottom + AnchorSideLeft.Control = Owner + AnchorSideLeft.Side = asrCenter AnchorSideTop.Control = ListBox1 - Left = 197 + Left = 268 Height = 35 Top = 30 Width = 149 @@ -232,10 +233,24 @@ object rxSortByForm: TrxSortByForm end object ButtonPanel1: TButtonPanel Left = 6 - Height = 42 - Top = 289 - Width = 571 + Height = 40 + Top = 365 + Width = 672 TabOrder = 7 ShowButtons = [pbOK, pbCancel, pbHelp] end + object CheckBox1: TCheckBox + AnchorSideLeft.Control = Owner + AnchorSideTop.Control = Label4 + AnchorSideTop.Side = asrBottom + AnchorSideBottom.Control = ButtonPanel1 + Left = 6 + Height = 19 + Top = 340 + Width = 163 + Anchors = [akLeft, akBottom] + BorderSpacing.Around = 6 + Caption = 'Case insensitive sort' + TabOrder = 8 + end end diff --git a/components/rx/rxsortby.lrs b/components/rx/rxsortby.lrs index 460a74258..a8ba63b02 100644 --- a/components/rx/rxsortby.lrs +++ b/components/rx/rxsortby.lrs @@ -1,33 +1,33 @@ -{ Este es un archivo de recurso de Lazarus generado automáticamente } +{ Это - файл ресурсов, автоматически созданный lazarus } LazarusResources.Add('TrxSortByForm','FORMDATA',[ - 'TPF0'#13'TrxSortByForm'#12'rxSortByForm'#4'Left'#3#194#1#6'Height'#3'Q'#1#3 - +'Top'#3#14#1#5'Width'#3'G'#2#13'ActiveControl'#7#6'AddBtn'#7'Caption'#6#14'S' - +'ort by fields'#12'ClientHeight'#3'Q'#1#11'ClientWidth'#3'G'#2#7'OnClose'#7#9 - +'FormClose'#8'OnCreate'#7#10'FormCreate'#8'Position'#7#14'poScreenCenter'#10 - +'LCLVersion'#6#6'0.9.27'#0#6'TLabel'#6'Label1'#22'AnchorSideLeft.Control'#7#5 - +'Owner'#21'AnchorSideTop.Control'#7#5'Owner'#4'Left'#2#6#6'Height'#2#18#3'To' - +'p'#2#6#5'Width'#3#131#0#20'BorderSpacing.Around'#2#6#7'Caption'#6#20'&Field' - +'s for sorting:'#12'FocusControl'#7#8'ListBox1'#11'ParentColor'#8#0#0#6'TLab' - +'el'#6'Label2'#22'AnchorSideLeft.Control'#7#6'AddBtn'#19'AnchorSideLeft.Side' - +#7#9'asrBottom'#21'AnchorSideTop.Control'#7#5'Owner'#4'Left'#3'`'#1#6'Height' - +#2#18#3'Top'#2#6#5'Width'#2'K'#20'BorderSpacing.Around'#2#6#7'Caption'#6#12 - +'&All fields:'#12'FocusControl'#7#8'ListBox2'#11'ParentColor'#8#0#0#6'TLabel' - +#6'Label4'#22'AnchorSideLeft.Control'#7#5'Owner'#24'AnchorSideBottom.Control' - +#7#9'ComboBox1'#21'AnchorSideBottom.Side'#7#9'asrBottom'#4'Left'#2#6#6'Heigh' - +'t'#2#18#3'Top'#3#9#1#5'Width'#2't'#7'Anchors'#11#6'akLeft'#8'akBottom'#0#18 - +'BorderSpacing.Left'#2#6#7'Caption'#6#17'Select sort order'#12'FocusControl' - +#7#9'ComboBox1'#11'ParentColor'#8#0#0#8'TListBox'#8'ListBox2'#22'AnchorSideL' - +'eft.Control'#7#6'AddBtn'#19'AnchorSideLeft.Side'#7#9'asrBottom'#21'AnchorSi' - +'deTop.Control'#7#6'Label2'#18'AnchorSideTop.Side'#7#9'asrBottom'#23'AnchorS' - +'ideRight.Control'#7#5'Owner'#20'AnchorSideRight.Side'#7#9'asrBottom'#24'Anc' - +'horSideBottom.Control'#7#9'ComboBox1'#4'Left'#3'`'#1#6'Height'#3#216#0#3'To' - +'p'#2#30#5'Width'#3#225#0#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#8'akBo' - +'ttom'#0#20'BorderSpacing.Around'#2#6#10'ItemHeight'#2#0#10'OnDblClick'#7#16 - +'ListBox2DblClick'#8'TabOrder'#2#0#8'TopIndex'#2#255#0#0#7'TBitBtn'#9'Remove' - +'Btn'#22'AnchorSideLeft.Control'#7#6'AddBtn'#21'AnchorSideTop.Control'#7#6'A' - +'ddBtn'#18'AnchorSideTop.Side'#7#9'asrBottom'#23'AnchorSideRight.Control'#7#6 - +'AddBtn'#20'AnchorSideRight.Side'#7#9'asrBottom'#4'Left'#3#197#0#6'Height'#2 + 'TPF0'#13'TrxSortByForm'#12'rxSortByForm'#4'Left'#3#194#1#6'Height'#3#155#1#3 + +'Top'#3#243#0#5'Width'#3#172#2#13'ActiveControl'#7#6'AddBtn'#7'Caption'#6#14 + +'Sort by fields'#12'ClientHeight'#3#155#1#11'ClientWidth'#3#172#2#7'OnClose' + +#7#9'FormClose'#8'OnCreate'#7#10'FormCreate'#8'Position'#7#14'poScreenCenter' + +#10'LCLVersion'#6#6'0.9.29'#0#6'TLabel'#6'Label1'#22'AnchorSideLeft.Control' + +#7#5'Owner'#21'AnchorSideTop.Control'#7#5'Owner'#4'Left'#2#6#6'Height'#2#18#3 + +'Top'#2#6#5'Width'#3#131#0#20'BorderSpacing.Around'#2#6#7'Caption'#6#20'&Fie' + +'lds for sorting:'#12'FocusControl'#7#8'ListBox1'#11'ParentColor'#8#0#0#6'TL' + +'abel'#6'Label2'#22'AnchorSideLeft.Control'#7#6'AddBtn'#19'AnchorSideLeft.Si' + +'de'#7#9'asrBottom'#21'AnchorSideTop.Control'#7#5'Owner'#4'Left'#3#167#1#6'H' + +'eight'#2#18#3'Top'#2#6#5'Width'#2'K'#20'BorderSpacing.Around'#2#6#7'Caption' + +#6#12'&All fields:'#12'FocusControl'#7#8'ListBox2'#11'ParentColor'#8#0#0#6'T' + +'Label'#6'Label4'#22'AnchorSideLeft.Control'#7#5'Owner'#24'AnchorSideBottom.' + +'Control'#7#9'ComboBox1'#21'AnchorSideBottom.Side'#7#9'asrBottom'#4'Left'#2#6 + +#6'Height'#2#18#3'Top'#3'<'#1#5'Width'#2't'#7'Anchors'#11#6'akLeft'#8'akBott' + +'om'#0#18'BorderSpacing.Left'#2#6#7'Caption'#6#17'Select sort order'#12'Focu' + +'sControl'#7#9'ComboBox1'#11'ParentColor'#8#0#0#8'TListBox'#8'ListBox2'#22'A' + +'nchorSideLeft.Control'#7#6'AddBtn'#19'AnchorSideLeft.Side'#7#9'asrBottom'#21 + +'AnchorSideTop.Control'#7#6'Label2'#18'AnchorSideTop.Side'#7#9'asrBottom'#23 + +'AnchorSideRight.Control'#7#5'Owner'#20'AnchorSideRight.Side'#7#9'asrBottom' + +#24'AnchorSideBottom.Control'#7#9'ComboBox1'#4'Left'#3#167#1#6'Height'#3#11#1 + +#3'Top'#2#30#5'Width'#3#255#0#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#8 + +'akBottom'#0#20'BorderSpacing.Around'#2#6#10'ItemHeight'#2#0#10'OnDblClick'#7 + +#16'ListBox2DblClick'#8'TabOrder'#2#0#8'TopIndex'#2#255#0#0#7'TBitBtn'#9'Rem' + +'oveBtn'#22'AnchorSideLeft.Control'#7#6'AddBtn'#21'AnchorSideTop.Control'#7#6 + +'AddBtn'#18'AnchorSideTop.Side'#7#9'asrBottom'#23'AnchorSideRight.Control'#7 + +#6'AddBtn'#20'AnchorSideRight.Side'#7#9'asrBottom'#4'Left'#3#12#1#6'Height'#2 +'#'#3'Top'#2'G'#5'Width'#3#149#0#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight' +#0#8'AutoSize'#9#17'BorderSpacing.Top'#2#6#7'Caption'#6#7'&Remove'#10'Glyph.' +'Data'#10#142#1#0#0#138#1#0#0'BM'#138#1#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#24#0#0 @@ -46,67 +46,73 @@ LazarusResources.Add('TrxSortByForm','FORMDATA',[ +'TabOrder'#2#2#0#0#7'TBitBtn'#5'UpBtn'#22'AnchorSideLeft.Control'#7#6'AddBtn' +#21'AnchorSideTop.Control'#7#9'RemoveBtn'#18'AnchorSideTop.Side'#7#9'asrBott' +'om'#23'AnchorSideRight.Control'#7#6'AddBtn'#20'AnchorSideRight.Side'#7#9'as' - +'rBottom'#4'Left'#3#197#0#6'Height'#2'$'#3'Top'#2'p'#5'Width'#3#149#0#7'Anch' - +'ors'#11#5'akTop'#6'akLeft'#7'akRight'#0#8'AutoSize'#9#17'BorderSpacing.Top' - +#2#6#7'Caption'#6#8'M&ove up'#10'Glyph.Data'#10#154#1#0#0#150#1#0#0'BM'#150#1 - +#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#23#0#0#0#24#0#0#0#1#0#4#0#0#0#0#0' '#1#0#0#0#0 - +#0#0#0#0#0#0#16#0#0#0#16#0#0#0#0#0#0#0#0#0#128#0#0#128#0#0#0#128#128#0#128#0 - +#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128#128#0#0#0#200#0#0#255#0#0 - +#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#0'wwwwwwwwwwwpwww' - +'wwwwwwwwpwwwwwwwwwwwpwwwx'#0#0#0#8'wwwpwwwp'#153#153#153#159'wwwpwwwp'#153 - +#153#153#159'wwwpwwwp'#153#153#153#159'wwwpwwwp'#153#153#153#159'wwwpwwwp' - +#153#153#153#159'wwwpwwwp'#153#153#153#159'wwwpx'#0#0#0#153#153#153#152#136 - +#136#143'pw'#9#153#153#153#153#153#153#153#153#247'pwp'#153#153#153#153#153 - +#153#153#159'wpww'#9#153#153#153#153#153#153#247'wpwwp'#153#153#153#153#153 - +#159'wwpwww'#9#153#153#153#153#247'wwpwwwp'#153#153#153#159'wwwpwwww'#9#153 - +#153#247'wwwpwwwwp'#153#159'wwwwpwwwww'#9#247'wwwwpwwwwwwwwwwpwwwwwwwwwwwpw' - +'wwwwwwwwwwpwwwwwwwwwwwp'#9'NumGlyphs'#2#0#7'OnClick'#7#10'UpBtnClick'#8'Tab' - +'Order'#2#3#0#0#7'TBitBtn'#7'DownBtn'#22'AnchorSideLeft.Control'#7#6'AddBtn' + +'rBottom'#4'Left'#3#12#1#6'Height'#2'$'#3'Top'#2'p'#5'Width'#3#149#0#7'Ancho' + +'rs'#11#5'akTop'#6'akLeft'#7'akRight'#0#8'AutoSize'#9#17'BorderSpacing.Top'#2 + +#6#7'Caption'#6#8'M&ove up'#10'Glyph.Data'#10#154#1#0#0#150#1#0#0'BM'#150#1#0 + +#0#0#0#0#0'v'#0#0#0'('#0#0#0#23#0#0#0#24#0#0#0#1#0#4#0#0#0#0#0' '#1#0#0#0#0#0 + +#0#0#0#0#0#16#0#0#0#16#0#0#0#0#0#0#0#0#0#128#0#0#128#0#0#0#128#128#0#128#0#0 + +#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128#128#0#0#0#200#0#0#255#0#0#0 + +#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#0'wwwwwwwwwwwpwwwww' + +'wwwwwwpwwwwwwwwwwwpwwwx'#0#0#0#8'wwwpwwwp'#153#153#153#159'wwwpwwwp'#153#153 + +#153#159'wwwpwwwp'#153#153#153#159'wwwpwwwp'#153#153#153#159'wwwpwwwp'#153 + +#153#153#159'wwwpwwwp'#153#153#153#159'wwwpx'#0#0#0#153#153#153#152#136#136 + +#143'pw'#9#153#153#153#153#153#153#153#153#247'pwp'#153#153#153#153#153#153 + +#153#159'wpww'#9#153#153#153#153#153#153#247'wpwwp'#153#153#153#153#153#159 + +'wwpwww'#9#153#153#153#153#247'wwpwwwp'#153#153#153#159'wwwpwwww'#9#153#153 + +#247'wwwpwwwwp'#153#159'wwwwpwwwww'#9#247'wwwwpwwwww'#127'wwwwwpwwwwwwwwwwwp' + +'wwwwwwwwwwwpwwwwwwwwwwwp'#9'NumGlyphs'#2#0#7'OnClick'#7#10'UpBtnClick'#8'Ta' + +'bOrder'#2#3#0#0#7'TBitBtn'#7'DownBtn'#22'AnchorSideLeft.Control'#7#6'AddBtn' +#21'AnchorSideTop.Control'#7#5'UpBtn'#18'AnchorSideTop.Side'#7#9'asrBottom' +#23'AnchorSideRight.Control'#7#6'AddBtn'#20'AnchorSideRight.Side'#7#9'asrBot' - +'tom'#4'Left'#3#197#0#6'Height'#2'$'#3'Top'#3#154#0#5'Width'#3#149#0#7'Ancho' - ,'rs'#11#5'akTop'#6'akLeft'#7'akRight'#0#8'AutoSize'#9#17'BorderSpacing.Top'#2 + +'tom'#4'Left'#3#12#1#6'Height'#2'$'#3'Top'#3#154#0#5'Width'#3#149#0#7'Anchor' + ,'s'#11#5'akTop'#6'akLeft'#7'akRight'#0#8'AutoSize'#9#17'BorderSpacing.Top'#2 +#6#7'Caption'#6#10'&Move down'#10'Glyph.Data'#10#154#1#0#0#150#1#0#0'BM'#150 +#1#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#23#0#0#0#24#0#0#0#1#0#4#0#0#0#0#0' '#1#0#0#0 +#0#0#0#0#0#0#0#16#0#0#0#16#0#0#0#0#0#0#0#0#0#128#0#0#128#0#0#0#128#128#0#128 +#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128#128#0#0#0#200#0#0#255#0 +#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#0'wwwwwwwwwwwpw' - +'wwwwwwwwwwpwwwwwwwwwwwpwwwwwwwwwwpwwwww'#9#247'wwwwpwwwwp'#153#159'wwwwpww' - +'ww'#9#153#153#247'wwwpwwwp'#153#153#153#159'wwwpwww'#9#153#153#153#153#247 - +'wwpwwp'#153#153#153#153#153#159'wwpww'#9#153#153#153#153#153#153#247'wpwp' - +#153#153#153#153#153#153#153#159'wpw'#9#153#153#153#153#153#153#153#153#247 - +'px'#0#0#0#153#153#153#152#136#136#143'pwwwp'#153#153#153#159'wwwpwwwp'#153 - +#153#153#159'wwwpwwwp'#153#153#153#159'wwwpwwwp'#153#153#153#159'wwwpwwwp' - +#153#153#153#159'wwwpwwwp'#153#153#153#159'wwwpwwwx'#0#0#0#8'wwwpwwwwwwwwwww' - +'pwwwwwwwwwwwpwwwwwwwwwwwp'#9'NumGlyphs'#2#0#7'OnClick'#7#12'DownBtnClick'#8 - +'TabOrder'#2#4#0#0#9'TComboBox'#9'ComboBox1'#22'AnchorSideLeft.Control'#7#6 + +'wwwwwwwwwwpwwwwwwwwwwwpwwwww'#127'wwwwwpwwwww'#9#247'wwwwpwwwwp'#153#159'ww' + +'wwpwwww'#9#153#153#247'wwwpwwwp'#153#153#153#159'wwwpwww'#9#153#153#153#153 + +#247'wwpwwp'#153#153#153#153#153#159'wwpww'#9#153#153#153#153#153#153#247'wp' + +'wp'#153#153#153#153#153#153#153#159'wpw'#9#153#153#153#153#153#153#153#153 + +#247'px'#0#0#0#153#153#153#152#136#136#143'pwwwp'#153#153#153#159'wwwpwwwp' + +#153#153#153#159'wwwpwwwp'#153#153#153#159'wwwpwwwp'#153#153#153#159'wwwpwww' + +'p'#153#153#153#159'wwwpwwwp'#153#153#153#159'wwwpwwwx'#0#0#0#8'wwwpwwwwwwww' + +'wwwpwwwwwwwwwwwpwwwwwwwwwwwp'#9'NumGlyphs'#2#0#7'OnClick'#7#12'DownBtnClick' + +#8'TabOrder'#2#4#0#0#9'TComboBox'#9'ComboBox1'#22'AnchorSideLeft.Control'#7#6 +'Label4'#19'AnchorSideLeft.Side'#7#9'asrBottom'#23'AnchorSideRight.Control'#7 +#5'Owner'#20'AnchorSideRight.Side'#7#9'asrBottom'#24'AnchorSideBottom.Contro' - +'l'#7#12'ButtonPanel1'#4'Left'#3#128#0#6'Height'#2#31#3'Top'#3#252#0#5'Width' - +#3#193#1#7'Anchors'#11#6'akLeft'#7'akRight'#8'akBottom'#0#20'BorderSpacing.A' - +'round'#2#6#10'ItemHeight'#2#0#5'Style'#7#14'csDropDownList'#8'TabOrder'#2#5 - +#0#0#8'TListBox'#8'ListBox1'#22'AnchorSideLeft.Control'#7#5'Owner'#21'Anchor' - +'SideTop.Control'#7#6'Label1'#18'AnchorSideTop.Side'#7#9'asrBottom'#24'Ancho' - +'rSideBottom.Control'#7#9'ComboBox1'#4'Left'#2#6#6'Height'#3#216#0#3'Top'#2 - +#30#5'Width'#3#185#0#7'Anchors'#11#5'akTop'#6'akLeft'#8'akBottom'#0#20'Borde' - +'rSpacing.Around'#2#6#10'ItemHeight'#2#0#10'OnDblClick'#7#16'ListBox1DblClic' - +'k'#8'TabOrder'#2#6#8'TopIndex'#2#255#0#0#7'TBitBtn'#6'AddBtn'#22'AnchorSide' - +'Left.Control'#7#8'ListBox1'#19'AnchorSideLeft.Side'#7#9'asrBottom'#21'Ancho' - +'rSideTop.Control'#7#8'ListBox1'#4'Left'#3#197#0#6'Height'#2'#'#3'Top'#2#30#5 - +'Width'#3#149#0#8'AutoSize'#9#7'Caption'#6#18'&Add field to sort'#10'Glyph.D' - +'ata'#10#142#1#0#0#138#1#0#0'BM'#138#1#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#24#0#0#0 - +#23#0#0#0#1#0#4#0#0#0#0#0#20#1#0#0#0#0#0#0#0#0#0#0#16#0#0#0#16#0#0#0#0#0#0#0 - +#0#0#128#0#0#128#0#0#0#128#128#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192 - +#192#0#128#128#128#0#0#0#200#0#0#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0 - +#255#255#0#0#255#255#255#0'wwwwwwwwwwwwwwwwwwxwwwwwwwwwww'#0'wwwwwwwwwwp'#144 - +'wwwwwwwwww'#9#144'wwwwwwwwwp'#153#144'wwwwwwwww'#9#153#144'wwwwwwwwp'#153 - +#153#144#0#0#0#135'wwww'#9#153#153#153#153#153#153#7'wwwp'#153#153#153#153 - +#153#153#153#7'www'#9#153#153#153#153#153#153#153#7'ww'#153#153#153#153#153 - +#153#153#153#7'www'#249#153#153#153#153#153#153#153#7'www'#153#153#153#153 - +#153#153#153#7'wwww'#249#153#153#153#153#153#153#7'wwww'#153#153#152#255#255 - +#255#135'wwwww'#249#153#152'wwwwwwwww'#153#152'wwwwwwwwww'#249#152'wwwwwwww' - +'ww'#152'wwwwwwwwwww'#248'wwwwwwwwwwwwwwwwwwwwwwwwwwww'#9'NumGlyphs'#2#0#7 - +'OnClick'#7#11'AddBtnClick'#8'TabOrder'#2#1#0#0#12'TButtonPanel'#12'ButtonPa' - +'nel1'#4'Left'#2#6#6'Height'#2'*'#3'Top'#3'!'#1#5'Width'#3';'#2#8'TabOrder'#2 - +#7#11'ShowButtons'#11#4'pbOK'#8'pbCancel'#6'pbHelp'#0#0#0#0 + +'l'#7#9'CheckBox1'#4'Left'#3#128#0#6'Height'#2#31#3'Top'#3'/'#1#5'Width'#3'&' + +#2#7'Anchors'#11#6'akLeft'#7'akRight'#8'akBottom'#0#20'BorderSpacing.Around' + +#2#6#10'ItemHeight'#2#0#5'Style'#7#14'csDropDownList'#8'TabOrder'#2#5#0#0#8 + +'TListBox'#8'ListBox1'#22'AnchorSideLeft.Control'#7#5'Owner'#21'AnchorSideTo' + +'p.Control'#7#6'Label1'#18'AnchorSideTop.Side'#7#9'asrBottom'#23'AnchorSideR' + +'ight.Control'#7#6'AddBtn'#24'AnchorSideBottom.Control'#7#9'ComboBox1'#4'Lef' + +'t'#2#6#6'Height'#3#11#1#3'Top'#2#30#5'Width'#3#0#1#7'Anchors'#11#5'akTop'#6 + +'akLeft'#7'akRight'#8'akBottom'#0#20'BorderSpacing.Around'#2#6#10'ItemHeight' + +#2#0#10'OnDblClick'#7#16'ListBox1DblClick'#8'TabOrder'#2#6#8'TopIndex'#2#255 + +#0#0#7'TBitBtn'#6'AddBtn'#22'AnchorSideLeft.Control'#7#5'Owner'#19'AnchorSid' + +'eLeft.Side'#7#9'asrCenter'#21'AnchorSideTop.Control'#7#8'ListBox1'#4'Left'#3 + +#12#1#6'Height'#2'#'#3'Top'#2#30#5'Width'#3#149#0#8'AutoSize'#9#7'Caption'#6 + +#18'&Add field to sort'#10'Glyph.Data'#10#142#1#0#0#138#1#0#0'BM'#138#1#0#0#0 + +#0#0#0'v'#0#0#0'('#0#0#0#24#0#0#0#23#0#0#0#1#0#4#0#0#0#0#0#20#1#0#0#0#0#0#0#0 + +#0#0#0#16#0#0#0#16#0#0#0#0#0#0#0#0#0#128#0#0#128#0#0#0#128#128#0#128#0#0#0 + +#128#0#128#0#128#128#0#0#192#192#192#0#128#128#128#0#0#0#200#0#0#255#0#0#0 + +#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#0'wwwwwwwwwwwwwwwww' + +'wxwwwwwwwwwww'#0'wwwwwwwwwwp'#144'wwwwwwwwww'#9#144'wwwwwwwwwp'#153#144'www' + +'wwwwww'#9#153#144'wwwwwwwwp'#153#153#144#0#0#0#135'wwww'#9#153#153#153#153 + +#153#153#7'wwwp'#153#153#153#153#153#153#153#7'www'#9#153#153#153#153#153#153 + +#153#7'ww'#127#153#153#153#153#153#153#153#153#7'www'#249#153#153#153#153#153 + +#153#153#7'www'#127#153#153#153#153#153#153#153#7'wwww'#249#153#153#153#153 + +#153#153#7'wwww'#127#153#153#152#255#255#255#135'wwwww'#249#153#152'wwwwwwww' + +'w'#127#153#152'wwwwwwwwww'#249#152'wwwwwwwwww'#127#152'wwwwwwwwwww'#248'www' + +'wwwwwwww'#127'wwwwwwwwwwwwwwwww'#9'NumGlyphs'#2#0#7'OnClick'#7#11'AddBtnCli' + +'ck'#8'TabOrder'#2#1#0#0#12'TButtonPanel'#12'ButtonPanel1'#4'Left'#2#6#6'Hei' + +'ght'#2'('#3'Top'#3'm'#1#5'Width'#3#160#2#8'TabOrder'#2#7#11'ShowButtons'#11 + +#4'pbOK'#8'pbCancel'#6'pbHelp'#0#0#0#9'TCheckBox'#9'CheckBox1'#22'AnchorSide' + +'Left.Control'#7#5'Owner'#21'AnchorSideTop.Control'#7#6'Label4'#18'AnchorSid' + +'eTop.Side'#7#9'asrBottom'#24'AnchorSideBottom.Control'#7#12'ButtonPanel1'#4 + +'Left'#2#6#6'Height'#2#19#3'Top'#3'T'#1#5'Width'#3#163#0#7'Anchors'#11#6'akL' + +'eft'#8'akBottom'#0#20'BorderSpacing.Around'#2#6#7'Caption'#6#21'Case insens' + +'itive sort'#8'TabOrder'#2#8#0#0#0 ]); diff --git a/components/rx/rxsortby.pas b/components/rx/rxsortby.pas index f559b5433..87c1089b3 100644 --- a/components/rx/rxsortby.pas +++ b/components/rx/rxsortby.pas @@ -15,6 +15,7 @@ type TrxSortByForm = class(TForm) AddBtn: TBitBtn; ButtonPanel1: TButtonPanel; + CheckBox1: TCheckBox; ComboBox1: TComboBox; DownBtn: TBitBtn; Label1: TLabel; @@ -90,6 +91,7 @@ begin RemoveBtn.Caption:=sRxSortByFormRemoveField; UpBtn.Caption:=sRxSortByFormMoveUpField; DownBtn.Caption:=sRxSortByFormMoveDnField; + CheckBox1.Caption:=sRxSortByFormCaseInsens; end; procedure TrxSortByForm.ListBox1DblClick(Sender: TObject); diff --git a/components/rx/rxsortmemds.pas b/components/rx/rxsortmemds.pas index 71311f040..1860aeecd 100644 --- a/components/rx/rxsortmemds.pas +++ b/components/rx/rxsortmemds.pas @@ -41,19 +41,20 @@ type { TRxMemoryDataSortEngine } - TRxMemoryDataSortEngine = class(TExDBGridSortEngine) + TRxMemoryDataSortEngine = class(TRxDBGridSortEngine) public - procedure Sort(Field:TField; ADataSet:TDataSet; Asc:boolean);override; + procedure Sort(Field:TField; ADataSet:TDataSet; Asc:boolean; SortOptions:TRxSortEngineOptions);override; procedure SortList(ListField:string; ADataSet:TDataSet; Asc:boolean);override; end; implementation uses rxmemds; -procedure TRxMemoryDataSortEngine.Sort(Field:TField; ADataSet:TDataSet; Asc:boolean); +procedure TRxMemoryDataSortEngine.Sort(Field:TField; ADataSet:TDataSet; + Asc:boolean; SortOptions:TRxSortEngineOptions); begin if Assigned(ADataSet) then - (ADataSet as TRxMemoryData).SortOnFields(Field.FieldName, true, not Asc); + (ADataSet as TRxMemoryData).SortOnFields(Field.FieldName, seoCaseInsensitiveSort in SortOptions, not Asc); end; procedure TRxMemoryDataSortEngine.SortList(ListField: string; @@ -64,6 +65,6 @@ begin end; initialization - RegisterExDBGridSortEngine(TRxMemoryDataSortEngine, TRxMemoryData); + RegisterRxDBGridSortEngine(TRxMemoryDataSortEngine, TRxMemoryData); end.