From 0f00d4a3c89f77a76e3dee623db84abe8fab38f8 Mon Sep 17 00:00:00 2001 From: Ansgar Becker Date: Sat, 14 Jul 2007 18:51:27 +0000 Subject: [PATCH] Enhancement: Disable the OK button in the new sorting dialog if there's no change to the old ORDER clause. Disabling that button should be the signal to the user that he didn't make any effective change yet. Helps forgetful people. --- source/data_sorting.pas | 44 ++++++++++++++++++++++++++++------------- 1 file changed, 30 insertions(+), 14 deletions(-) diff --git a/source/data_sorting.pas b/source/data_sorting.pas index 892a60d6..a03b1ee2 100644 --- a/source/data_sorting.pas +++ b/source/data_sorting.pas @@ -26,11 +26,13 @@ type { Private declarations } ColumnNames : TStringList; OrderColumns : Array of TOrderCol; + reg_name, OldOrderClause : String; procedure DisplaySortingControls; procedure dropdownColsChange( Sender: TObject ); procedure buttonOrderClick( Sender: TObject ); procedure buttonDeleteClick( Sender: TObject ); procedure Modified; + function ComposeOrderClause: String; public { Public declarations } end; @@ -59,6 +61,7 @@ procedure TDataSortingForm.FormShow(Sender: TObject); var i : Cardinal; grid: TSMDBGrid; + reg : TRegistry; begin // Take column names from listColumns and add here ColumnNames := TStringList.Create; @@ -67,6 +70,13 @@ begin ColumnNames.Add( Mainform.Childwin.listColumns.Items[i].Caption ); end; + // Read original ORDER clause from registry + reg := TRegistry.Create(); + reg.OpenKey( REGPATH + '\Servers\' + Mainform.Childwin.Description, true ); + reg_name := 'ORDERCLAUSE_' + Mainform.Childwin.ActualDatabase + '.' + Mainform.Childwin.ActualTable; + OldOrderClause := reg.ReadString(reg_name); + reg.CloseKey; + // Create one OrderColumns record for each grid.SortColumn grid := Mainform.Childwin.gridData; if grid.SortColumns.Count > 0 then // Avoids AV when accessing SortColumn[0] ... ?? @@ -305,41 +315,47 @@ end; {** - Gets called when any option has changed. Enables the OK button. + Gets called when any option has changed. + Enables the OK button if ORDER options have changed } procedure TDataSortingForm.Modified; begin - btnOk.Enabled := True; + btnOk.Enabled := ComposeOrderClause <> OldOrderClause; end; {** - OK clicked + Concat all sort options to a ORDER clause } -procedure TDataSortingForm.btnOKClick(Sender: TObject); +function TDataSortingForm.ComposeOrderClause: String; var - reg : TRegistry; - reg_name, reg_value, sort : String; i : Integer; + sort : String; begin - // Concat all sort options to a ORDER clause - reg_value := ''; + result := ''; for i := 0 to Length(OrderColumns) - 1 do begin - if reg_value <> '' then - reg_value := reg_value + ', '; + if result <> '' then + result := result + ', '; if OrderColumns[i].SortDirection = ORDER_ASC then sort := TXT_ASC else sort := TXT_DESC; - reg_value := reg_value + Mainform.Mask( OrderColumns[i].ColumnName ) + ' ' + sort; + result := result + Mainform.Mask( OrderColumns[i].ColumnName ) + ' ' + sort; end; +end; - // Write ORDER clause to registry + +{** + OK clicked: Write ORDER clause to registry +} +procedure TDataSortingForm.btnOKClick(Sender: TObject); +var + reg : TRegistry; +begin reg := TRegistry.Create(); reg.OpenKey( REGPATH + '\Servers\' + Mainform.Childwin.Description, true ); - reg_name := 'ORDERCLAUSE_' + Mainform.Childwin.ActualDatabase + '.' + Mainform.Childwin.ActualTable; - reg.WriteString( reg_name, reg_value ); + reg.WriteString( reg_name, ComposeOrderClause ); reg.CloseKey; end;