From 3128e2a84460559c19e2390731d0ecc3d73667fa Mon Sep 17 00:00:00 2001 From: alexs75 Date: Sat, 8 Feb 2014 11:02:58 +0000 Subject: [PATCH] RxDBGrid - new property TRxCollumn.SortField - define custom sort field(s) for grid collumn git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@2896 8e941d3f-bd1b-0410-a28a-d453659cc2b4 --- components/rx/trunk/dcl_rx_ctrl.lpk | 26 ++- components/rx/trunk/dcl_rx_ctrl.pas | 18 +- components/rx/trunk/exsortfb.pas | 6 +- components/rx/trunk/exsortsql.pas | 6 +- components/rx/trunk/exsortzeos.pas | 7 +- components/rx/trunk/languages/rxdconst.es.po | 20 ++ components/rx/trunk/languages/rxdconst.po | 20 ++ components/rx/trunk/languages/rxdconst.ru.po | 20 ++ components/rx/trunk/languages/rxdconst.uk.po | 20 ++ components/rx/trunk/register_rxctrl.pas | 182 +++++++++++++++++- components/rx/trunk/registerrx.pas | 72 +------ components/rx/trunk/rxceeditlookupfields.pas | 8 +- components/rx/trunk/rxdbgrid.pas | 19 +- components/rx/trunk/rxdconst.pas | 5 + components/rx/trunk/rxnew.lpk | 190 +++++++++---------- components/rx/trunk/rxnew.pas | 18 +- components/rx/trunk/rxsortmemds.pas | 8 +- components/rx/trunk/tooledit.pas | 9 - 18 files changed, 420 insertions(+), 234 deletions(-) diff --git a/components/rx/trunk/dcl_rx_ctrl.lpk b/components/rx/trunk/dcl_rx_ctrl.lpk index 7a9f3f8d8..30301a956 100644 --- a/components/rx/trunk/dcl_rx_ctrl.lpk +++ b/components/rx/trunk/dcl_rx_ctrl.lpk @@ -1,32 +1,40 @@ - + - + - - + - + + + + + + - - + + + + + + - + @@ -34,7 +42,7 @@ - + diff --git a/components/rx/trunk/dcl_rx_ctrl.pas b/components/rx/trunk/dcl_rx_ctrl.pas index d39f51f9a..0341ae663 100644 --- a/components/rx/trunk/dcl_rx_ctrl.pas +++ b/components/rx/trunk/dcl_rx_ctrl.pas @@ -1,23 +1,21 @@ -{ Этот файл был автоматически создан Lazarus. Н - редактировать! - Исходный код используется только для комп - ляции и установки пакета. +{ This file was automatically created by Lazarus. Do not edit! + This source is only used to compile and install the package. } -unit dcl_rx_ctrl; +unit dcl_rx_ctrl; interface uses - register_rxctrl, LazarusPackageIntf; + register_rxctrl, rxceEditLookupFields, LazarusPackageIntf; implementation -procedure Register; +procedure Register; begin - RegisterUnit('register_rxctrl', @register_rxctrl.Register); -end; + RegisterUnit('register_rxctrl', @register_rxctrl.Register); +end; initialization - RegisterPackage('dcl_rx_ctrl', @Register); + RegisterPackage('dcl_rx_ctrl', @Register); end. diff --git a/components/rx/trunk/exsortfb.pas b/components/rx/trunk/exsortfb.pas index eb0cba3f6..3803a3011 100644 --- a/components/rx/trunk/exsortfb.pas +++ b/components/rx/trunk/exsortfb.pas @@ -52,7 +52,7 @@ type procedure UpdateFooterRows(ADataSet:TDataSet; AGrid:TRxDBGrid);override; function EnabledFooterRowsCalc:boolean;override; public - procedure Sort(Field:TField; ADataSet:TDataSet; Asc:boolean; SortOptions:TRxSortEngineOptions);override; + procedure Sort(FieldName: string; ADataSet:TDataSet; Asc:boolean; SortOptions:TRxSortEngineOptions);override; procedure SortList(ListField:string; ADataSet:TDataSet; Asc: array of boolean; SortOptions: TRxSortEngineOptions);override; end; @@ -87,11 +87,11 @@ begin Result:=true; end; -procedure TFBDataSetSortEngine.Sort(Field: TField; ADataSet: TDataSet; +procedure TFBDataSetSortEngine.Sort(FieldName: string; ADataSet: TDataSet; Asc: boolean; SortOptions: TRxSortEngineOptions); begin if Assigned(ADataSet) then - (ADataSet as TFBDataSet).SortOnField(Field.FieldName, Asc); + (ADataSet as TFBDataSet).SortOnField(FieldName, Asc); end; procedure TFBDataSetSortEngine.SortList(ListField: string; ADataSet: TDataSet; diff --git a/components/rx/trunk/exsortsql.pas b/components/rx/trunk/exsortsql.pas index 37c7c0ad6..1d1e2f11f 100644 --- a/components/rx/trunk/exsortsql.pas +++ b/components/rx/trunk/exsortsql.pas @@ -43,7 +43,7 @@ type TSQLQuerySortEngine = class(TRxDBGridSortEngine) public - procedure Sort(Field:TField; ADataSet:TDataSet; Asc:boolean; SortOptions:TRxSortEngineOptions);override; + procedure Sort(FieldName: string; ADataSet:TDataSet; Asc:boolean; SortOptions:TRxSortEngineOptions);override; procedure SortList(ListField: string; ADataSet: TDataSet; Asc: array of boolean; SortOptions: TRxSortEngineOptions); override; end; @@ -51,10 +51,10 @@ implementation uses SQLDB, synRegExpr, strUtils; -procedure TSQLQuerySortEngine.Sort(Field: TField; ADataSet: TDataSet; +procedure TSQLQuerySortEngine.Sort(FieldName: string; ADataSet: TDataSet; Asc: boolean; SortOptions: TRxSortEngineOptions); begin - SortList(Field.FieldName,ADataSet,Asc,SortOptions); + SortList(FieldName,ADataSet,Asc,SortOptions); end; procedure TSQLQuerySortEngine.SortList(ListField: string; ADataSet: TDataSet; diff --git a/components/rx/trunk/exsortzeos.pas b/components/rx/trunk/exsortzeos.pas index 591941149..296072963 100644 --- a/components/rx/trunk/exsortzeos.pas +++ b/components/rx/trunk/exsortzeos.pas @@ -16,7 +16,7 @@ type procedure UpdateFooterRows(ADataSet:TDataSet; AGrid:TRxDBGrid);override; function EnabledFooterRowsCalc:boolean;override; public - procedure Sort(Field:TField; ADataSet:TDataSet; Asc:boolean; SortOptions:TRxSortEngineOptions);override; + procedure Sort(FieldName: string; ADataSet:TDataSet; Asc:boolean; SortOptions:TRxSortEngineOptions);override; procedure SortList(ListField: string; ADataSet: TDataSet; Asc: array of boolean; SortOptions: TRxSortEngineOptions); override; end; @@ -117,12 +117,13 @@ begin Result:=true; end; -procedure TZeosDataSetSortEngine.Sort(Field:TField; ADataSet:TDataSet; Asc:boolean; SortOptions:TRxSortEngineOptions); +procedure TZeosDataSetSortEngine.Sort(FieldName: string; ADataSet: TDataSet; + Asc: boolean; SortOptions: TRxSortEngineOptions); begin if not Assigned(ADataSet) then exit; if ADataSet is TZAbstractDataset then begin - TZAbstractDataset(ADataSet).SortedFields:=Field.FieldName; + TZAbstractDataset(ADataSet).SortedFields:=FieldName; if Asc then TZAbstractDataset(ADataSet).SortType:=stAscending else diff --git a/components/rx/trunk/languages/rxdconst.es.po b/components/rx/trunk/languages/rxdconst.es.po index 8ae023568..0c5779cc1 100644 --- a/components/rx/trunk/languages/rxdconst.es.po +++ b/components/rx/trunk/languages/rxdconst.es.po @@ -213,6 +213,10 @@ msgstr "Registro" msgid "Retry to connect with database?" msgstr "Reintentar conectar con la base de dato?" +#: rxdconst.srxallfields +msgid "All fields" +msgstr "" + #: rxdconst.srxascendign msgid "Ascendign" msgstr "Ascendente" @@ -316,6 +320,18 @@ msgstr "Ordenar por Columnas" msgid "Descending" msgstr "Descendente" +#: rxdconst.srxfieldslookupdisplay +msgid "Fields as LookupDisplay" +msgstr "" + +#: rxdconst.srxfillfieldslookupdisp +msgid "Fill fields in LookupDisplay property" +msgstr "" + +#: rxdconst.srxfillsortfieldsdisp +msgid "Fill fields in SortField property" +msgstr "" + #: rxdconst.srxfilterformapply msgid "Apply" msgstr "Aceptar" @@ -403,6 +419,10 @@ msgstr "&Campos Disponibles :" msgid "Select f&ield for sort data:" msgstr "Seleccionar Dirección de Ordenamiento :" +#: rxdconst.srxsortfieldsdisplay +msgid "Fields as SortField" +msgstr "" + #: rxdconst.srxsoursedataset msgid "Sourse dataset" msgstr "Fuente del Conjunto de Datos" diff --git a/components/rx/trunk/languages/rxdconst.po b/components/rx/trunk/languages/rxdconst.po index 1869b9b83..65236678f 100644 --- a/components/rx/trunk/languages/rxdconst.po +++ b/components/rx/trunk/languages/rxdconst.po @@ -213,6 +213,10 @@ msgstr "" msgid "Retry to connect with database?" msgstr "" +#: rxdconst.srxallfields +msgid "All fields" +msgstr "" + #: rxdconst.srxascendign msgid "Ascendign" msgstr "" @@ -316,6 +320,18 @@ msgstr "" msgid "Descending" msgstr "" +#: rxdconst.srxfieldslookupdisplay +msgid "Fields as LookupDisplay" +msgstr "" + +#: rxdconst.srxfillfieldslookupdisp +msgid "Fill fields in LookupDisplay property" +msgstr "" + +#: rxdconst.srxfillsortfieldsdisp +msgid "Fill fields in SortField property" +msgstr "" + #: rxdconst.srxfilterformapply msgid "Apply" msgstr "" @@ -401,6 +417,10 @@ msgstr "" msgid "Select f&ield for sort data:" msgstr "" +#: rxdconst.srxsortfieldsdisplay +msgid "Fields as SortField" +msgstr "" + #: rxdconst.srxsoursedataset msgid "Sourse dataset" msgstr "" diff --git a/components/rx/trunk/languages/rxdconst.ru.po b/components/rx/trunk/languages/rxdconst.ru.po index a81cf1df5..635c4f377 100644 --- a/components/rx/trunk/languages/rxdconst.ru.po +++ b/components/rx/trunk/languages/rxdconst.ru.po @@ -213,6 +213,10 @@ msgstr "Регистрация" msgid "Retry to connect with database?" msgstr "Вы хотите повторить попытку соединения с базой данных?" +#: rxdconst.srxallfields +msgid "All fields" +msgstr "" + #: rxdconst.srxascendign msgid "Ascendign" msgstr "По возрастанию" @@ -316,6 +320,18 @@ msgstr "Сортировать данные по колонкам" msgid "Descending" msgstr "По убыванию" +#: rxdconst.srxfieldslookupdisplay +msgid "Fields as LookupDisplay" +msgstr "" + +#: rxdconst.srxfillfieldslookupdisp +msgid "Fill fields in LookupDisplay property" +msgstr "" + +#: rxdconst.srxfillsortfieldsdisp +msgid "Fill fields in SortField property" +msgstr "" + #: rxdconst.srxfilterformapply msgid "Apply" msgstr "Применить" @@ -401,6 +417,10 @@ msgstr "&Выбранные поля" msgid "Select f&ield for sort data:" msgstr "Укажите поля для сортировки данных :" +#: rxdconst.srxsortfieldsdisplay +msgid "Fields as SortField" +msgstr "" + #: rxdconst.srxsoursedataset msgid "Sourse dataset" msgstr "Исходная таблица" diff --git a/components/rx/trunk/languages/rxdconst.uk.po b/components/rx/trunk/languages/rxdconst.uk.po index 65685dbaa..7857bbe2f 100644 --- a/components/rx/trunk/languages/rxdconst.uk.po +++ b/components/rx/trunk/languages/rxdconst.uk.po @@ -222,6 +222,10 @@ msgstr "Реєстрація" msgid "Retry to connect with database?" msgstr "Ви хочете повторити спробу з'єднання з базою даних?" +#: rxdconst.srxallfields +msgid "All fields" +msgstr "" + #: rxdconst.srxascendign msgid "Ascendign" msgstr "По зростанню" @@ -325,6 +329,18 @@ msgstr "Сортувати дані по колонках" msgid "Descending" msgstr "За зменшенням" +#: rxdconst.srxfieldslookupdisplay +msgid "Fields as LookupDisplay" +msgstr "" + +#: rxdconst.srxfillfieldslookupdisp +msgid "Fill fields in LookupDisplay property" +msgstr "" + +#: rxdconst.srxfillsortfieldsdisp +msgid "Fill fields in SortField property" +msgstr "" + #: rxdconst.srxfilterformapply msgid "Apply" msgstr "Застосувати" @@ -410,6 +426,10 @@ msgstr "&Вибрані поля" msgid "Select f&ield for sort data:" msgstr "Вкажіть поля для сортування даних :" +#: rxdconst.srxsortfieldsdisplay +msgid "Fields as SortField" +msgstr "" + #: rxdconst.srxsoursedataset msgid "Sourse dataset" msgstr "Початкова таблиця" diff --git a/components/rx/trunk/register_rxctrl.pas b/components/rx/trunk/register_rxctrl.pas index dcdf1bf01..4ea23335c 100644 --- a/components/rx/trunk/register_rxctrl.pas +++ b/components/rx/trunk/register_rxctrl.pas @@ -4,15 +4,36 @@ unit register_rxctrl; interface uses - Classes, SysUtils, LResources, LazarusPackageIntf; + Classes, SysUtils, LResources, LazarusPackageIntf, DBPropEdits, PropEdits, + DB, ComponentEditors; -procedure Register; -implementation -uses RxLogin, ComponentEditors, RxAppIcon, Dialogs, rxconst; +type -resourcestring - sTestTRxLoginDialog = 'Test TRxLoginDialog'; - sLoadIcon = 'Load icon'; + { TRxCollumsSortFieldsProperty } + + TRxCollumsSortFieldsProperty = class(TDBGridFieldProperty) + public + function GetAttributes: TPropertyAttributes; override; + procedure Edit; override; + procedure FillValues(const Values: TStringList); override; + end; + + { TPopUpColumnFieldProperty } + + TPopUpColumnFieldProperty = class(TFieldProperty) + public + procedure FillValues(const Values: TStringList); override; + end; + +type + + { THistoryButtonProperty } + + THistoryButtonProperty = class(TStringPropertyEditor) + public + function GetAttributes: TPropertyAttributes; override; + procedure GetValues(Proc: TGetStrProc); override; + end; type @@ -41,6 +62,16 @@ type procedure ExecuteVerb(Index:integer);override; end; +procedure Register; +implementation +uses RxLogin, RxAppIcon, Dialogs, rxconst, RxHistoryNavigator, rxpopupunit, + rxceEditLookupFields, rxdbgrid, rxdconst, duallist, rxstrutils, Forms; + +resourcestring + sTestTRxLoginDialog = 'Test TRxLoginDialog'; + sLoadIcon = 'Load icon'; + + { TRxLoginDialogEditor } constructor TRxLoginDialogEditor.Create(AComponent: TComponent; @@ -160,13 +191,148 @@ begin end; end; +{ THistoryButtonProperty } + +function THistoryButtonProperty.GetAttributes: TPropertyAttributes; +begin + Result:= [paValueList, paSortList, paMultiSelect]; +end; + +procedure THistoryButtonProperty.GetValues(Proc: TGetStrProc); +var + I: Integer; + Navigator:TRxHistoryNavigator; +begin + Navigator:=TRxHistoryNavigator(GetComponent(0)); + if Assigned(Navigator) then + begin + if Assigned(Navigator.ToolPanel) then + begin + for i:=0 to Navigator.ToolPanel.Items.Count - 1 do + begin + if Assigned(Navigator.ToolPanel.Items[i].Action) then + Proc(Navigator.ToolPanel.Items[i].Action.Name); + end; + end; + end; +end; + +{ TPopUpColumnFieldProperty } + +procedure TPopUpColumnFieldProperty.FillValues(const Values: TStringList); +var + Column: TPopUpColumn; + DataSource: TDataSource; +begin + Column:=TPopUpColumn(GetComponent(0)); + if not (Column is TPopUpColumn) then exit; + DataSource := TPopUpFormColumns(Column.Collection).PopUpFormOptions.DataSource; + if Assigned(DataSource) and Assigned(DataSource.DataSet) then + DataSource.DataSet.GetFieldNames(Values); +end; + + +{ TRxCollumsSortFieldsProperty } + +function TRxCollumsSortFieldsProperty.GetAttributes: TPropertyAttributes; +begin + Result:= [paValueList, paSortList, paMultiSelect, paDialog]; +end; + +procedure TRxCollumsSortFieldsProperty.Edit; +var + DualListDialog1: TDualListDialog; + FCol:TRxColumn; + /// FGrid:TRxDBGrid; + +procedure DoInitFill; +var + i,j:integer; + LookupDisplay:string; +begin + LookupDisplay:=FCol.SortFields; + if LookupDisplay<>'' then + begin + StrToStrings(LookupDisplay, DualListDialog1.List2, ';'); + for i:=DualListDialog1.List1.Count-1 downto 0 do + begin + j:=DualListDialog1.List2.IndexOf(DualListDialog1.List1[i]); + if j>=0 then + DualListDialog1.List1.Delete(i); + end; + end; +end; + +function DoFillDone:string; +var + i:integer; +begin + for i:=0 to DualListDialog1.List2.Count-1 do + Result:=Result + DualListDialog1.List2[i]+';'; + if Result<>'' then + Result:=Copy(Result, 1, Length(Result)-1); +end; + +procedure DoSetCaptions; +begin + DualListDialog1.Label1Caption:=sRxAllFields; + DualListDialog1.Label2Caption:=sRxSortFieldsDisplay; + DualListDialog1.Title:=sRxFillSortFieldsDisp; +end; + +begin + FCol:=nil; + + if GetComponent(0) is TRxColumn then + FCol:=TRxColumn(GetComponent(0)) + else + exit; + + DualListDialog1:=TDualListDialog.Create(Application); + try + DoSetCaptions; + FillValues(DualListDialog1.List1 as TStringList); + DoInitFill; + if DualListDialog1.Execute then + FCol.SortFields:=DoFillDone; + finally + FreeAndNil(DualListDialog1); + end; +end; + +procedure TRxCollumsSortFieldsProperty.FillValues(const Values: TStringList); +var + Column: TRxColumn; + Grid: TRxDBGrid; + DataSource: TDataSource; +begin + Column:=TRxColumn(GetComponent(0)); + if not (Column is TRxColumn) then exit; + Grid:=TRxDBGrid(Column.Grid); + if not (Grid is TRxDBGrid) then exit; +// LoadDataSourceFields(Grid.DataSource, Values); + + DataSource := Grid.DataSource; + if (DataSource is TDataSource) and Assigned(DataSource.DataSet) then + DataSource.DataSet.GetFieldNames(Values); + +end; + procedure Register; begin // RegisterComponentEditor(TRxLoginDialog, TRxLoginDialogEditor); RegisterComponentEditor(TRxAppIcon, TRxAppIconEditor); -end; + // + RegisterPropertyEditor(TypeInfo(string), TPopUpColumn, 'FieldName', TPopUpColumnFieldProperty); + RegisterPropertyEditor(TypeInfo(string), TRxHistoryNavigator, 'BackBtn', THistoryButtonProperty); + RegisterPropertyEditor(TypeInfo(string), TRxHistoryNavigator, 'ForwardBtn', THistoryButtonProperty); + RegisterPropertyEditor(TypeInfo(string), TRxColumn, 'SortFields', TRxCollumsSortFieldsProperty); + + RegisterCEEditLookupFields; + // +end; end. diff --git a/components/rx/trunk/registerrx.pas b/components/rx/trunk/registerrx.pas index 4186eb632..5dd3ce198 100644 --- a/components/rx/trunk/registerrx.pas +++ b/components/rx/trunk/registerrx.pas @@ -49,71 +49,9 @@ uses curredit, rxswitch, rxdice, rxtoolbar, rxxpman, PageMngr, RxAppIcon, Dialogs, ComponentEditors, DBPropEdits, DB, rxctrls, RxCustomChartPanel, AutoPanel, pickdate, rxconst, tooledit, rxclock, - rxceEditLookupFields, rxpopupunit, rxspin, RxTimeEdit, + rxpopupunit, rxspin, RxTimeEdit, RxAboutDialog, RxViewsPanel, RxMDI; -type - - - { TPopUpColumnFieldProperty } - - TPopUpColumnFieldProperty = class(TFieldProperty) - public - procedure FillValues(const Values: TStringList); override; - end; - -{ TPopUpColumnFieldProperty } - -procedure TPopUpColumnFieldProperty.FillValues(const Values: TStringList); -var - Column: TPopUpColumn; - DataSource: TDataSource; -begin - Column:=TPopUpColumn(GetComponent(0)); - if not (Column is TPopUpColumn) then exit; - DataSource := TPopUpFormColumns(Column.Collection).PopUpFormOptions.DataSource; - if Assigned(DataSource) and Assigned(DataSource.DataSet) then - DataSource.DataSet.GetFieldNames(Values); -end; - -type - - { THistoryButtonProperty } - - THistoryButtonProperty = class(TStringPropertyEditor) - public - function GetAttributes: TPropertyAttributes; override; - procedure GetValues(Proc: TGetStrProc); override; - end; - - - -{ THistoryButtonProperty } - -function THistoryButtonProperty.GetAttributes: TPropertyAttributes; -begin - Result:= [paValueList, paSortList, paMultiSelect]; -end; - -procedure THistoryButtonProperty.GetValues(Proc: TGetStrProc); -var - I: Integer; - Navigator:TRxHistoryNavigator; -begin - Navigator:=TRxHistoryNavigator(GetComponent(0)); - if Assigned(Navigator) then - begin - if Assigned(Navigator.ToolPanel) then - begin - for i:=0 to Navigator.ToolPanel.Items.Count - 1 do - begin - if Assigned(Navigator.ToolPanel.Items[i].Action) then - Proc(Navigator.ToolPanel.Items[i].Action.Name); - end; - end; - end; -end; - {$IFDEF USE_TRxAppIcon} procedure RegisterRxAppIcon; begin @@ -252,14 +190,6 @@ begin RegisterUnit('RxViewsPanel', @RegisterRxViewsPanel); RegisterUnit('RxHistoryNavigator', @RegisterRxHistoryNavigator); RegisterUnit('RxMDI', @RegisterRxMDI); - - - -// - RegisterPropertyEditor(TypeInfo(string), TPopUpColumn, 'FieldName', TPopUpColumnFieldProperty); - RegisterPropertyEditor(TypeInfo(string), TRxHistoryNavigator, 'BackBtn', THistoryButtonProperty); - RegisterPropertyEditor(TypeInfo(string), TRxHistoryNavigator, 'ForwardBtn', THistoryButtonProperty); - RegisterCEEditLookupFields; end; initialization diff --git a/components/rx/trunk/rxceeditlookupfields.pas b/components/rx/trunk/rxceeditlookupfields.pas index 282c4082c..10d3634d9 100644 --- a/components/rx/trunk/rxceeditlookupfields.pas +++ b/components/rx/trunk/rxceeditlookupfields.pas @@ -61,7 +61,7 @@ procedure RegisterCEEditLookupFields; implementation uses // - db, duallist, Forms, rxstrutils, TypInfo, + db, duallist, Forms, rxstrutils, TypInfo, rxdconst, //unit for edits rxlookup; @@ -150,9 +150,9 @@ end; procedure DoSetCaptions; begin - DualListDialog1.Label1Caption:='All fields'; - DualListDialog1.Label2Caption:='Fields is LookupDisplay'; - DualListDialog1.Title:='Fill fields in LookupDisplay property'; + DualListDialog1.Label1Caption:=sRxAllFields; + DualListDialog1.Label2Caption:=sRxFieldsLookupDisplay; + DualListDialog1.Title:=sRxFillFieldsLookupDisp; end; begin diff --git a/components/rx/trunk/rxdbgrid.pas b/components/rx/trunk/rxdbgrid.pas index c87eae807..3894b81cb 100644 --- a/components/rx/trunk/rxdbgrid.pas +++ b/components/rx/trunk/rxdbgrid.pas @@ -209,7 +209,7 @@ type procedure UpdateFooterRows(ADataSet:TDataSet; AGrid:TRxDBGrid);virtual; abstract; function EnabledFooterRowsCalc:boolean;virtual; public - procedure Sort(Field: TField; ADataSet: TDataSet; Asc: boolean; SortOptions: TRxSortEngineOptions); virtual; abstract; + procedure Sort(FieldName: string; ADataSet: TDataSet; Asc: boolean; SortOptions: TRxSortEngineOptions); virtual; abstract; procedure SortList(ListField: string; ADataSet: TDataSet; Asc: array of boolean; SortOptions: TRxSortEngineOptions); virtual; end; @@ -416,12 +416,14 @@ type FKeyList: TStrings; FNotInKeyListIndex: integer; FOnDrawColumnCell: TDrawColumnCellEvent; + FSortFields: string; FSortOrder: TSortMarker; FSortPosition: integer; FWordWrap: boolean; function GetConstraints: TRxDBGridCollumnConstraints; function GetFooter: TRxColumnFooter; function GetKeyList: TStrings; + function GetSortFields:string; procedure SetConstraints(AValue: TRxDBGridCollumnConstraints); procedure SetEditButtons(AValue: TRxColumnEditButtons); procedure SetFilter(const AValue: TRxColumnFilter); @@ -440,6 +442,7 @@ type property SortOrder: TSortMarker read FSortOrder write FSortOrder; property SortPosition: integer read FSortPosition; published + property SortFields: string read FSortFields write FSortFields; property Footer: TRxColumnFooter read GetFooter write SetFooter; property Constraints:TRxDBGridCollumnConstraints read GetConstraints write SetConstraints; property ImageList: TImageList read FImageList write SetImageList; @@ -1871,7 +1874,7 @@ end; function TRxDBGrid.GetSortField: string; begin if FSortColumns.Count > 0 then - Result:=FSortColumns[0].FieldName + Result:=FSortColumns[0].GetSortFields else Result:=''; end; @@ -2584,13 +2587,13 @@ begin Asc[i]:=FSortColumns[i].FSortOrder = smUp; if S<>'' then S:=S+';'; - S:=S + FSortColumns[i].FieldName; + S:=S + FSortColumns[i].GetSortFields; end; { TODO : Необходимо добавить опцию регистронезависимого поиска } FSortEngine.SortList(S, DataSource.DataSet, Asc, SortEngineOptions); end else - FSortEngine.Sort(FSortColumns[0].Field, DataSource.DataSet, FSortColumns[0].FSortOrder = smUp, SortEngineOptions); + FSortEngine.Sort(FSortColumns[0].GetSortFields, DataSource.DataSet, FSortColumns[0].FSortOrder = smUp, SortEngineOptions); FSortingNow:=false; end; @@ -4872,6 +4875,14 @@ begin Result := FKeyList; end; +function TRxColumn.GetSortFields: string; +begin + if FSortFields = '' then + Result:=FieldName + else + Result:=FSortFields; +end; + procedure TRxColumn.SetConstraints(AValue: TRxDBGridCollumnConstraints); begin FConstraints.Assign(AValue); diff --git a/components/rx/trunk/rxdconst.pas b/components/rx/trunk/rxdconst.pas index 4ac06102f..2a1bb0922 100644 --- a/components/rx/trunk/rxdconst.pas +++ b/components/rx/trunk/rxdconst.pas @@ -92,6 +92,11 @@ resourcestring SCircularDataLink = 'SCircularDataLink'; sRxAscendign = 'Ascendign'; sRxDescending = 'Descending'; + sRxAllFields = 'All fields'; + sRxFieldsLookupDisplay = 'Fields as LookupDisplay'; + sRxFillFieldsLookupDisp = 'Fill fields in LookupDisplay property'; + sRxSortFieldsDisplay = 'Fields as SortField'; + sRxFillSortFieldsDisp = 'Fill fields in SortField property'; SDeleteRecordQuestion = 'Delete record?'; diff --git a/components/rx/trunk/rxnew.lpk b/components/rx/trunk/rxnew.lpk index 08ce1bcac..cee89b7bc 100644 --- a/components/rx/trunk/rxnew.lpk +++ b/components/rx/trunk/rxnew.lpk @@ -26,8 +26,8 @@ Copyright (c) 1998 Master-Bank translate to Lazarus by alexs in 2005 - 2014 "/> - - + + @@ -116,193 +116,189 @@ translate to Lazarus by alexs in 2005 - 2014 - - - - - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + diff --git a/components/rx/trunk/rxnew.pas b/components/rx/trunk/rxnew.pas index 3008ac2a6..27beb9def 100644 --- a/components/rx/trunk/rxnew.pas +++ b/components/rx/trunk/rxnew.pas @@ -10,15 +10,15 @@ uses AutoPanel, boxprocs, curredit, dateutil, dbcurredit, dbdateedit, dbutils, duallist, fduallst, folderlister, pagemngr, pickdate, registerrx, RegisterRxDB, RegisterRxTools, RxAboutDialog, rxAboutFormUnit, rxappicon, - rxapputils, rxceEditLookupFields, rxclock, rxConfigValues, rxconst, rxctrls, - rxcustomchartpanel, RxDBColorBox, rxdbcomb, RxDBCtrls, rxdbgrid, - rxdbgrid_columsunit, rxdbgrid_findunit, RxDBSpinEdit, RxDBTimeEdit, - rxdconst, rxdice, rxFileUtils, rxfilterby, rxiconv, rxlogin, rxlookup, - rxmemds, rxpopupunit, rxsortmemds, rxspin, rxstrutils, rxswitch, - RxSystemServices, rxtbrsetup, RxTimeEdit, rxtoolbar, RxVersInfo, - RxViewsPanel, rxxpman, seldsfrm, tooledit, vclutils, RxCloseFormValidator, - RxHistoryNavigator, ex_rx_bin_datapacket, ex_rx_datapacket, - ex_rx_xml_datapacket, rxsortby, RxMDI, RxIniPropStorage, LazarusPackageIntf; + rxapputils, rxclock, rxConfigValues, rxconst, rxctrls, rxcustomchartpanel, + RxDBColorBox, rxdbcomb, RxDBCtrls, rxdbgrid, rxdbgrid_columsunit, + rxdbgrid_findunit, RxDBSpinEdit, RxDBTimeEdit, rxdconst, rxdice, + rxFileUtils, rxfilterby, rxiconv, rxlogin, rxlookup, rxmemds, rxpopupunit, + rxsortmemds, rxspin, rxstrutils, rxswitch, RxSystemServices, rxtbrsetup, + RxTimeEdit, rxtoolbar, RxVersInfo, RxViewsPanel, rxxpman, seldsfrm, + tooledit, vclutils, RxCloseFormValidator, RxHistoryNavigator, + ex_rx_bin_datapacket, ex_rx_datapacket, ex_rx_xml_datapacket, rxsortby, + RxMDI, RxIniPropStorage, LazarusPackageIntf; implementation diff --git a/components/rx/trunk/rxsortmemds.pas b/components/rx/trunk/rxsortmemds.pas index b90e3640c..ee3328460 100644 --- a/components/rx/trunk/rxsortmemds.pas +++ b/components/rx/trunk/rxsortmemds.pas @@ -47,7 +47,7 @@ type procedure UpdateFooterRows(ADataSet:TDataSet; AGrid:TRxDBGrid);override; function EnabledFooterRowsCalc:boolean;override; public - procedure Sort(Field:TField; ADataSet:TDataSet; Asc:boolean; SortOptions:TRxSortEngineOptions);override; + procedure Sort(FieldName: string; ADataSet:TDataSet; Asc:boolean; SortOptions:TRxSortEngineOptions);override; procedure SortList(ListField:string; ADataSet:TDataSet; Asc: array of boolean; SortOptions: TRxSortEngineOptions);override; end; @@ -116,11 +116,11 @@ begin Result:=true; end; -procedure TRxMemoryDataSortEngine.Sort(Field:TField; ADataSet:TDataSet; - Asc:boolean; SortOptions:TRxSortEngineOptions); +procedure TRxMemoryDataSortEngine.Sort(FieldName: string; ADataSet: TDataSet; + Asc: boolean; SortOptions: TRxSortEngineOptions); begin if Assigned(ADataSet) then - (ADataSet as TRxMemoryData).SortOnFields(Field.FieldName, seoCaseInsensitiveSort in SortOptions, not Asc); + (ADataSet as TRxMemoryData).SortOnFields(FieldName, seoCaseInsensitiveSort in SortOptions, not Asc); end; procedure TRxMemoryDataSortEngine.SortList(ListField: string; diff --git a/components/rx/trunk/tooledit.pas b/components/rx/trunk/tooledit.pas index 49bfec235..8809af416 100644 --- a/components/rx/trunk/tooledit.pas +++ b/components/rx/trunk/tooledit.pas @@ -597,15 +597,6 @@ begin ABounds := Screen.MonitorFromPoint(P).BoundsRect; -{ if PopupOrigin.X + Width > ABounds.Right then - Left := ABounds.Right - Width - else - Left := PopupOrigin.X; - if PopupOrigin.Y + Height > ABounds.Bottom then - Top := ABounds.Bottom - Height - else - Top := PopupOrigin.Y;} - Y := P.Y + Height; if Y + FPopup.Height > ABounds.Right then Y := P.Y - FPopup.Height;