From c2e37893527afafd8eb37c9773abe0e2a67e6386 Mon Sep 17 00:00:00 2001 From: alexs75 Date: Mon, 24 Sep 2012 14:21:22 +0000 Subject: [PATCH] 1. RxDBGrid - create new shortcat - Ctrl+A - select all rows 2. RxDBGrid - new procedure - SelectAllRows 3. RxDBGrid - try to fix error with edit Lockup filed in modal dialogs 4. RxDBGrid - add new key strokes: rxgcSelectAll - select all rows rxgcDeSelectAll - deselect all rows rxgcInvertSelection - invert selection rxgcOptimizeColumnsWidth - Optimize all columns width 5. New packet (rx_sort_fbdataset.lpk) and component (TRxSortFBDataSet) - add to project sort engine for FBDataSet git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@2536 8e941d3f-bd1b-0410-a28a-d453659cc2b4 --- components/rx/languages/rxdconst.es.po | 4 + components/rx/languages/rxdconst.po | 4 + components/rx/languages/rxdconst.ru.po | 4 + components/rx/rx_sort_fbdataset.lpk | 47 +++++++++++ components/rx/rx_sort_fbdataset.pas | 21 +++++ components/rx/rxdbgrid.pas | 105 +++++++++++++++++++++++-- components/rx/rxdconst.pas | 1 + components/rx/rxlookup.pas | 1 + components/rx/rxsortfbdataset.pas | 32 ++++++++ 9 files changed, 214 insertions(+), 5 deletions(-) create mode 100644 components/rx/rx_sort_fbdataset.lpk create mode 100644 components/rx/rx_sort_fbdataset.pas create mode 100644 components/rx/rxsortfbdataset.pas diff --git a/components/rx/languages/rxdconst.es.po b/components/rx/languages/rxdconst.es.po index 8aa2060f1..79d876c54 100644 --- a/components/rx/languages/rxdconst.es.po +++ b/components/rx/languages/rxdconst.es.po @@ -296,6 +296,10 @@ msgstr "Mover columna seleccionada para arriba" msgid "Move selected column down" msgstr "Mover columna seleccionada para abajo" +#: rxdconst.srxdbgridselectallrows +msgid "Select all rows" +msgstr "" + #: rxdconst.srxdbgridselectcolumns msgid "Select visible collumns" msgstr "Seleccionar Columnas Visibles" diff --git a/components/rx/languages/rxdconst.po b/components/rx/languages/rxdconst.po index 73403c78b..92b6a84a6 100644 --- a/components/rx/languages/rxdconst.po +++ b/components/rx/languages/rxdconst.po @@ -296,6 +296,10 @@ msgstr "" msgid "Move selected column down" msgstr "" +#: rxdconst.srxdbgridselectallrows +msgid "Select all rows" +msgstr "" + #: rxdconst.srxdbgridselectcolumns msgid "Select visible collumns" msgstr "" diff --git a/components/rx/languages/rxdconst.ru.po b/components/rx/languages/rxdconst.ru.po index ac6203201..e2c1a8d14 100644 --- a/components/rx/languages/rxdconst.ru.po +++ b/components/rx/languages/rxdconst.ru.po @@ -296,6 +296,10 @@ msgstr "Переместить выбранное поле выше" msgid "Move selected column down" msgstr "Переместить выбранное поле ниже" +#: rxdconst.srxdbgridselectallrows +msgid "Select all rows" +msgstr "Выделить все строки" + #: rxdconst.srxdbgridselectcolumns msgid "Select visible collumns" msgstr "Выбор столбцов для отображения" diff --git a/components/rx/rx_sort_fbdataset.lpk b/components/rx/rx_sort_fbdataset.lpk new file mode 100644 index 000000000..630f4643e --- /dev/null +++ b/components/rx/rx_sort_fbdataset.lpk @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/components/rx/rx_sort_fbdataset.pas b/components/rx/rx_sort_fbdataset.pas new file mode 100644 index 000000000..f4f3b96d2 --- /dev/null +++ b/components/rx/rx_sort_fbdataset.pas @@ -0,0 +1,21 @@ +{ This file was automatically created by Lazarus. Do not edit! + This source is only used to compile and install the package. + } + +unit rx_sort_fbdataset; + +interface + +uses + RxSortFBDataSet, exsortfb, LazarusPackageIntf; + +implementation + +procedure Register; +begin + RegisterUnit('RxSortFBDataSet', @RxSortFBDataSet.Register); +end; + +initialization + RegisterPackage('rx_sort_fbdataset', @Register); +end. diff --git a/components/rx/rxdbgrid.pas b/components/rx/rxdbgrid.pas index 9b0b2e015..356d1cde0 100644 --- a/components/rx/rxdbgrid.pas +++ b/components/rx/rxdbgrid.pas @@ -102,7 +102,9 @@ type TRxDBGridCommand = (rxgcNone, rxgcShowFindDlg, rxgcShowColumnsDlg, rxgcShowFilterDlg, rxgcShowSortDlg, rxgcShowQuickFilter, - rxgcHideQuickFilter + rxgcHideQuickFilter, rxgcSelectAll, rxgcDeSelectAll, rxgcInvertSelection, + rxgcOptimizeColumnsWidth + ); TRxDSState = (rxdsInactive, rxdsActive); @@ -596,6 +598,7 @@ type procedure OnFilterClose(Sender: TObject); procedure OnSortBy(Sender: TObject); procedure OnChooseVisibleFields(Sender: TObject); + procedure OnSelectAllRows(Sender: TObject); procedure Loaded; override; procedure UpdateFooterRowOnUpdateActive; @@ -620,6 +623,9 @@ type procedure UpdateTitleHight; procedure GetOnCreateLookup; procedure GetOnDisplayLookup; + procedure SelectAllRows; + procedure DeSelectAllRows; + procedure InvertSelection; property Canvas; property DefaultTextStyle; @@ -765,7 +771,7 @@ uses Math, rxdconst, rxstrutils, rxdbgrid_findunit, rxdbgrid_columsunit, rxlookup, tooledit, LCLProc, rxfilterby, rxsortby; const - EditorCommandStrs: array[0..6] of TIdentMapEntry = + EditorCommandStrs: array[0..10] of TIdentMapEntry = ( (Value: Ord(rxgcNone); Name: 'rxcgNone'), (Value: Ord(rxgcShowFindDlg); Name: 'rxgcShowFindDlg'), @@ -773,7 +779,11 @@ const (Value: Ord(rxgcShowFilterDlg); Name: 'rxgcShowFilterDlg'), (Value: Ord(rxgcShowSortDlg); Name: 'rxgcShowSortDlg'), (Value: Ord(rxgcShowQuickFilter); Name: 'rxgcShowQuickFilter'), - (Value: Ord(rxgcHideQuickFilter); Name: 'rxgcHideQuickFilter') + (Value: Ord(rxgcHideQuickFilter); Name: 'rxgcHideQuickFilter'), + (Value: Ord(rxgcSelectAll); Name: 'rxgcSelectAll'), + (Value: Ord(rxgcDeSelectAll); Name: 'rxgcDeSelectAll'), + (Value: Ord(rxgcInvertSelection); Name: 'rxgcInvertSelection'), + (Value: Ord(rxgcOptimizeColumnsWidth); Name: 'rxgcOptimizeColumnsWidth') ); var @@ -1589,6 +1599,7 @@ begin CreateMenuItem(#0, '-', nil); CreateMenuItem('C', sRxDBGridSortByColumns, @OnSortBy); CreateMenuItem('W', sRxDBGridSelectColumns, @OnChooseVisibleFields); + CreateMenuItem('A', sRxDBGridSelectAllRows, @OnSelectAllRows); end; function TRxDBGrid.GetPropertyStorage: TCustomPropertyStorage; @@ -2063,6 +2074,7 @@ begin F_PopupMenu.Items[3].ShortCut := DoShortCut(rxgcHideQuickFilter); F_PopupMenu.Items[5].ShortCut := DoShortCut(rxgcShowSortDlg); F_PopupMenu.Items[6].ShortCut := DoShortCut(rxgcShowColumnsDlg); + F_PopupMenu.Items[7].ShortCut := DoShortCut(rxgcSelectAll); end; function TRxDBGrid.SortEngineOptions: TRxSortEngineOptions; @@ -3167,8 +3179,12 @@ begin rxgcShowQuickFilter: DoShowQuickFilter; rxgcHideQuickFilter: OnFilterClose(Self); rxgcShowSortDlg: OnSortBy(Self); - else - exit; + rxgcSelectAll: SelectAllRows; + rxgcDeSelectAll: DeSelectAllRows; + rxgcInvertSelection:InvertSelection; + rxgcOptimizeColumnsWidth:OptimizeColumnsWidthAll; + else + exit; end; Key := 0; end; @@ -3739,6 +3755,11 @@ begin ShowColumnsDialog; end; +procedure TRxDBGrid.OnSelectAllRows(Sender: TObject); +begin + SelectAllRows; +end; + procedure TRxDBGrid.Loaded; begin inherited Loaded; @@ -3830,6 +3851,76 @@ begin if Assigned(F_DisplayLookup) then F_DisplayLookup(FRxDbGridLookupComboEditor); end; + +procedure TRxDBGrid.SelectAllRows; +var + P:TBookMark; +begin + if DatalinkActive then + begin + DataSource.DataSet.DisableControls; + P:=DataSource.DataSet.Bookmark; + try + DataSource.DataSet.First; + while not DataSource.DataSet.EOF do + begin + SelectedRows.CurrentRowSelected:=true; + DataSource.DataSet.Next; + end; + finally + DataSource.DataSet.Bookmark:=P; + DataSource.DataSet.EnableControls; + end; + Invalidate; + end; +end; + +procedure TRxDBGrid.DeSelectAllRows; +var + P:TBookMark; +begin + if DatalinkActive then + begin + DataSource.DataSet.DisableControls; + P:=DataSource.DataSet.Bookmark; + try + DataSource.DataSet.First; + while not DataSource.DataSet.EOF do + begin + SelectedRows.CurrentRowSelected:=false; + DataSource.DataSet.Next; + end; + finally + DataSource.DataSet.Bookmark:=P; + DataSource.DataSet.EnableControls; + end; + Invalidate; + end; +end; + +procedure TRxDBGrid.InvertSelection; +var + P:TBookMark; +begin + if DatalinkActive then + begin + DataSource.DataSet.DisableControls; + P:=DataSource.DataSet.Bookmark; + try + DataSource.DataSet.First; + while not DataSource.DataSet.EOF do + begin + SelectedRows.CurrentRowSelected:=not SelectedRows.CurrentRowSelected; + DataSource.DataSet.Next; + end; + finally + DataSource.DataSet.Bookmark:=P; + DataSource.DataSet.EnableControls; + end; + Invalidate; + end; +end; + //!!! constructor TRxDBGrid.Create(AOwner: TComponent); begin @@ -4704,6 +4795,10 @@ begin AddE(rxgcShowSortDlg, Menus.ShortCut(Ord('S'), [ssCtrl])); AddE(rxgcShowQuickFilter, Menus.ShortCut(Ord('Q'), [ssCtrl])); AddE(rxgcHideQuickFilter, Menus.ShortCut(Ord('H'), [ssCtrl])); + AddE(rxgcSelectAll, Menus.ShortCut(Ord('A'), [ssCtrl])); + AddE(rxgcDeSelectAll, Menus.ShortCut(Ord('-'), [ssCtrl])); + AddE(rxgcInvertSelection, Menus.ShortCut(Ord('*'), [ssCtrl])); + AddE(rxgcOptimizeColumnsWidth, Menus.ShortCut(Ord('+'), [ssCtrl])); end; function TRxDBGridKeyStrokes.FindRxCommand(AKey: word; diff --git a/components/rx/rxdconst.pas b/components/rx/rxdconst.pas index a8c4dcd85..c21184218 100644 --- a/components/rx/rxdconst.pas +++ b/components/rx/rxdconst.pas @@ -110,6 +110,7 @@ resourcestring sRxDBGridSortByColumns = 'Sort data for collumns';// Ctrl+C';'Ordenar por Columnas Ctrl+C'; sRxDBGridSelectColumns = 'Select visible collumns';// Ctrl+W';'Seleccionar Columnas Ctrl+W'; sRxDBGridEmptiFilter = '(Empty)'; + sRxDBGridSelectAllRows = 'Select all rows';// Ctrl+W';'Seleccionar Columnas Ctrl+W'; //RxDBGrid filter form sRxFilterFormSelectExp = 'Enter filter expression for data in table:'; diff --git a/components/rx/rxlookup.pas b/components/rx/rxlookup.pas index 2a186f430..6794d1d3a 100644 --- a/components/rx/rxlookup.pas +++ b/components/rx/rxlookup.pas @@ -1204,6 +1204,7 @@ begin if AResult and Assigned(FDataLink.DataSource) then begin FDataLink.Edit; + Visible:=true; NeedUpdateData;//We need to update DataField; end; diff --git a/components/rx/rxsortfbdataset.pas b/components/rx/rxsortfbdataset.pas new file mode 100644 index 000000000..24f73c65f --- /dev/null +++ b/components/rx/rxsortfbdataset.pas @@ -0,0 +1,32 @@ +unit RxSortFBDataSet; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils; + +type + TRxSortFBDataSet = class(TComponent) + private + { Private declarations } + protected + { Protected declarations } + public + { Public declarations } + published + { Published declarations } + end; + +procedure Register; + +implementation +uses exsortfb; + +procedure Register; +begin + RegisterComponents('RX DBAware',[TRxSortFBDataSet]); +end; + +end.