home *** CD-ROM | disk | FTP | other *** search
/ PC World 2000 October / PCWorld_2000-10_cd2.bin / Borland / interbase / IBConsole_src.ZIP / ibconsole / frmuSQLOptions.pas < prev    next >
Pascal/Delphi Source File  |  2000-07-24  |  15KB  |  469 lines

  1. {
  2.  * The contents of this file are subject to the InterBase Public License
  3.  * Version 1.0 (the "License"); you may not use this file except in
  4.  * compliance with the License.
  5.  * 
  6.  * You may obtain a copy of the License at http://www.Inprise.com/IPL.html.
  7.  * 
  8.  * Software distributed under the License is distributed on an "AS IS"
  9.  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
  10.  * the License for the specific language governing rights and limitations
  11.  * under the License.  The Original Code was created by Inprise
  12.  * Corporation and its predecessors.
  13.  * 
  14.  * Portions created by Inprise Corporation are Copyright (C) Inprise
  15.  * Corporation. All Rights Reserved.
  16.  * 
  17.  * Contributor(s): ______________________________________.
  18. }
  19.  
  20. unit frmuSQLOptions;
  21.  
  22. interface
  23.  
  24. uses
  25.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  26.   frmuDlgClass, StdCtrls, ExtCtrls, Grids, ComCtrls;
  27.  
  28. type
  29.   TfrmSQLOptions = class(TDialog)
  30.     btnApply: TButton;
  31.     Button1: TButton;
  32.     pgControl: TPageControl;
  33.     TabSheet1: TTabSheet;
  34.     TabSheet2: TTabSheet;
  35.     sgOptions: TStringGrid;
  36.     pnlOptionName: TPanel;
  37.     cbOptions: TComboBox;
  38.     GroupBox1: TGroupBox;
  39.     cbUpdateConnect: TCheckBox;
  40.     cbUpdateCreate: TCheckBox;
  41.     rgTransactions: TRadioGroup;
  42.     Label1: TLabel;
  43.     Memo1: TMemo;
  44.     cbClearInput: TCheckBox;
  45.     Button2: TButton;
  46.     procedure FormCreate(Sender: TObject);
  47.     procedure btnApplyClick(Sender: TObject);
  48.     procedure cbOptionsChange(Sender: TObject);
  49.     procedure cbOptionsDblClick(Sender: TObject);
  50.     procedure cbOptionsExit(Sender: TObject);
  51.     procedure cbOptionsKeyDown(Sender: TObject; var Key: Word;
  52.       Shift: TShiftState);
  53.     procedure sgOptionsDblClick(Sender: TObject);
  54.     procedure sgOptionsDrawCell(Sender: TObject; ACol, ARow: Integer;
  55.       Rect: TRect; State: TGridDrawState);
  56.     procedure sgOptionsSelectCell(Sender: TObject; ACol, ARow: Integer;
  57.       var CanSelect: Boolean);
  58.     procedure Button1Click(Sender: TObject);
  59.     procedure FormShow(Sender: TObject);
  60.     procedure Button2Click(Sender: TObject);
  61.   private
  62.     { Private declarations }
  63.   public
  64.     { Public declarations }
  65.   end;
  66.  
  67. var
  68.   frmSQLOptions: TfrmSQLOptions;
  69.  
  70. implementation
  71.  
  72. uses zluGlobal, Registry;
  73.  
  74. {$R *.DFM}
  75. const
  76.   OPTION_NAME_COL = 0;
  77.   OPTION_VALUE_COL = 1;
  78.  
  79.   SHOW_QUERY_PLAN_ROW = 0;
  80.   AUTO_COMMIT_DDL_ROW = 1;
  81.   CHARACTER_SET_ROW = 2;
  82.   BLOB_DISPLAY_ROW = 3;
  83.   BLOB_SUBTYPE_ROW = 4;
  84.   ISQL_TERMINATOR_ROW = 5;
  85.   DEFAULT_DIALECT_ROW = 6;
  86.  
  87. procedure TfrmSQLOptions.FormCreate(Sender: TObject);
  88. begin
  89.   inherited;
  90.   sgOptions.DefaultRowHeight := cbOptions.Height;
  91.   cbOptions.Visible := False;
  92.   pnlOptionname.Visible := False;
  93.   sgOptions.RowCount := 7;
  94.   pgControl.ActivePageIndex := 0;
  95.  
  96.   sgOptions.Cells[OPTION_NAME_COL,SHOW_QUERY_PLAN_ROW] := 'Show Query Plan';
  97.   if gAppSettings[SHOW_QUERY_PLAN].Setting = false then
  98.     sgOptions.Cells[OPTION_VALUE_COL,SHOW_QUERY_PLAN_ROW] := 'False'
  99.   else
  100.     sgOptions.Cells[OPTION_VALUE_COL,SHOW_QUERY_PLAN_ROW] := 'True';
  101.  
  102.   sgOptions.Cells[OPTION_NAME_COL,AUTO_COMMIT_DDL_ROW] := 'Auto Commit DDL';
  103.   if gAppSettings[AUTO_COMMIT_DDL].Setting = false then
  104.     sgOptions.Cells[OPTION_VALUE_COL,AUTO_COMMIT_DDL_ROW] := 'False'
  105.   else
  106.     sgOptions.Cells[OPTION_VALUE_COL,AUTO_COMMIT_DDL_ROW] := 'True';
  107.  
  108.   sgOptions.Cells[OPTION_NAME_COL,CHARACTER_SET_ROW] := 'Character Set';
  109.   sgOptions.Cells[OPTION_VALUE_COL,CHARACTER_SET_ROW] := gAppSettings[CHARACTER_SET].Setting;
  110.  
  111.   sgOptions.Cells[OPTION_NAME_COL,BLOB_DISPLAY_ROW] := 'BLOB Display';
  112.   sgOptions.Cells[OPTION_VALUE_COL,BLOB_DISPLAY_ROW] := gAppSettings[BLOB_DISPLAY].Setting;
  113.  
  114.   sgOptions.Cells[OPTION_NAME_COL,BLOB_SUBTYPE_ROW] := 'BLOB Subtype';
  115.   sgOptions.Cells[OPTION_VALUE_COL,BLOB_SUBTYPE_ROW] := gAppSettings[BLOB_SUBTYPE].Setting;
  116.  
  117.   sgOptions.Cells[OPTION_NAME_COL,ISQL_TERMINATOR_ROW] := 'Terminator';
  118.   sgOptions.Cells[OPTION_VALUE_COL,ISQL_TERMINATOR_ROW] := gAppSettings[ISQL_TERMINATOR].Setting;
  119.  
  120.   sgOptions.Cells[OPTION_NAME_COL,DEFAULT_DIALECT_ROW] := 'Client Dialect';
  121.   sgOptions.Cells[OPTION_VALUE_COL,DEFAULT_DIALECT_ROW] := gAppSettings[DEFAULT_DIALECT].Setting;
  122.  
  123.   cbClearInput.Checked := gAppSettings[CLEAR_INPUT].Setting;
  124.   cbUpdateConnect.Checked := gAppSettings[UPDATE_ON_CONNECT].Setting;
  125.   cbUpdateCreate.Checked := gAppSettings[UPDATE_ON_CREATE].Setting;
  126.   rgTransactions.ItemIndex := gAppSettings[COMMIT_ON_EXIT].Setting;
  127. end;
  128.  
  129. procedure TfrmSQLOptions.btnApplyClick(Sender: TObject);
  130. var
  131.   NewSetting: boolean;
  132.   Reg: TRegistry;
  133. begin
  134.   inherited;
  135.   Reg := TRegistry.Create;
  136.   Screen.Cursor := crHourGlass;
  137.   with Reg do
  138.   begin
  139.     OpenKey (gRegSettingsKey, false);
  140.  
  141.     if sgOptions.Cells[OPTION_VALUE_COL,SHOW_QUERY_PLAN_ROW] = 'True' then
  142.       NewSetting := true
  143.     else
  144.       NewSetting := false;
  145.  
  146.     if NewSetting <> gAppSettings[SHOW_QUERY_PLAN].Setting then
  147.     begin
  148.       gAppSettings[SHOW_QUERY_PLAN].Setting := NewSetting;
  149.       WriteBool(gAppSettings[SHOW_QUERY_PLAN].Name, gAppSettings[SHOW_QUERY_PLAN].Setting);
  150.     end;
  151.  
  152.  
  153.     if sgOptions.Cells[OPTION_VALUE_COL,AUTO_COMMIT_DDL_ROW] = 'True' then
  154.       NewSetting := true
  155.     else
  156.       NewSetting := false;
  157.  
  158.     if NewSetting <> gAppSettings[AUTO_COMMIT_DDL].Setting then
  159.     begin
  160.       gAppSettings[AUTO_COMMIT_DDL].Setting := NewSetting;
  161.       WriteBool(gAppSettings[AUTO_COMMIT_DDL].Name, gAppSettings[AUTO_COMMIT_DDL].Setting);
  162.     end;
  163.  
  164.     if gAppSettings[CHARACTER_SET].Setting <> sgOptions.Cells[OPTION_VALUE_COL,CHARACTER_SET_ROW] then
  165.     begin
  166.       gAppSettings[CHARACTER_SET].Setting := sgOptions.Cells[OPTION_VALUE_COL,CHARACTER_SET_ROW];
  167.       WriteString(gAppSettings[CHARACTER_SET].Name, gAppSettings[CHARACTER_SET].Setting);
  168.     end;
  169.  
  170.     if gAppSettings[BLOB_DISPLAY].Setting <> sgOptions.Cells[OPTION_VALUE_COL,BLOB_DISPLAY_ROW] then
  171.     begin
  172.       gAppSettings[BLOB_DISPLAY].Setting := sgOptions.Cells[OPTION_VALUE_COL,BLOB_DISPLAY_ROW];
  173.       WriteString(gAppSettings[BLOB_DISPLAY].Name, gAppSettings[BLOB_DISPLAY].Setting);
  174.     end;
  175.  
  176.     if gAppSettings[BLOB_SUBTYPE].Setting <> sgOptions.Cells[OPTION_VALUE_COL,BLOB_SUBTYPE_ROW] then
  177.     begin
  178.       gAppSettings[BLOB_SUBTYPE].Setting := sgOptions.Cells[OPTION_VALUE_COL,BLOB_SUBTYPE_ROW];
  179.       WriteString(gAppSettings[BLOB_SUBTYPE].Name, gAppSettings[BLOB_SUBTYPE].Setting);
  180.     end;
  181.  
  182.     if gAppSettings[ISQL_TERMINATOR].Setting <> sgOptions.Cells[OPTION_VALUE_COL,ISQL_TERMINATOR_ROW] then
  183.     begin
  184.       gAppSettings[ISQL_TERMINATOR].Setting := sgOptions.Cells[OPTION_VALUE_COL,ISQL_TERMINATOR_ROW];
  185.       WriteString(gAppSettings[ISQL_TERMINATOR].Name, gAppSettings[ISQL_TERMINATOR].Setting);
  186.     end;
  187.  
  188.     if gAppSettings[DEFAULT_DIALECT].Setting <> StrToInt(sgOptions.Cells[OPTION_VALUE_COL,DEFAULT_DIALECT_ROW]) then
  189.     begin
  190.       gAppSettings[DEFAULT_DIALECT].Setting := StrToInt(sgOptions.Cells[OPTION_VALUE_COL,DEFAULT_DIALECT_ROW]);
  191.       WriteInteger(gAppSettings[DEFAULT_DIALECT].Name, gAppSettings[DEFAULT_DIALECT].Setting);
  192.     end;
  193.  
  194.     if gAppSettings[UPDATE_ON_CONNECT].Setting <> cbUpdateConnect.Checked then
  195.     begin
  196.       gAppSettings[UPDATE_ON_CONNECT].Setting := cbUpdateConnect.Checked;
  197.       WriteBool(gAppSettings[UPDATE_ON_CONNECT].Name, gAppSettings[UPDATE_ON_CONNECT].Setting);
  198.     end;
  199.  
  200.     if gAppSettings[UPDATE_ON_CREATE].Setting <> cbUpdateCreate.Checked then
  201.     begin
  202.       gAppSettings[UPDATE_ON_CREATE].Setting := cbUpdateCreate.Checked;
  203.       WriteBool(gAppSettings[UPDATE_ON_CREATE].Name, gAppSettings[UPDATE_ON_CREATE].Setting);
  204.     end;
  205.  
  206.     if gAppSettings[CLEAR_INPUT].Setting <> cbClearInput.Checked then
  207.     begin
  208.       gAppSettings[CLEAR_INPUT].Setting := cbClearInput.Checked;
  209.       WriteBool(gAppSettings[CLEAR_INPUT].Name, gAppSettings[CLEAR_INPUT].Setting);
  210.     end;
  211.  
  212.     if gAppSettings[COMMIT_ON_EXIT].Setting <> rgTransactions.ItemIndex then
  213.     begin
  214.       gAppSettings[COMMIT_ON_EXIT].Setting := rgTransactions.ItemIndex;
  215.       WriteInteger(gAppSettings[COMMIT_ON_EXIT].Name, gAppSettings[COMMIT_ON_EXIT].Setting);
  216.     end;
  217.  
  218.     CloseKey;
  219.     Free;
  220.   end;
  221.   Screen.Cursor := crDefault;
  222. end;
  223.  
  224. procedure TfrmSQLOptions.cbOptionsChange(Sender: TObject);
  225. begin
  226.   inherited;
  227.   btnApply.Enabled := true;
  228. end;
  229.  
  230. procedure TfrmSQLOptions.cbOptionsDblClick(Sender: TObject);
  231. begin
  232.   inherited;
  233.   if (sgOptions.Col = OPTION_VALUE_COL) or (sgOptions.Col = OPTION_NAME_COL) then
  234.   begin
  235.     if cbOptions.ItemIndex = cbOptions.Items.Count - 1 then
  236.       cbOptions.ItemIndex := 0
  237.     else
  238.       cbOptions.ItemIndex := cbOptions.ItemIndex + 1;
  239.  
  240.     if (sgOptions.Col = OPTION_VALUE_COL) then
  241.       sgOptions.Cells[sgOptions.Col,sgOptions.Row] := cbOptions.Items[cbOptions.ItemIndex];
  242.   end;
  243. end;
  244.  
  245. procedure TfrmSQLOptions.cbOptionsExit(Sender: TObject);
  246. var
  247.   lR     : TRect;
  248.   iIndex : Integer;
  249. begin
  250.   inherited;
  251.   iIndex := cbOptions.Items.IndexOf(cbOptions.Text);
  252.  
  253.   if (iIndex = -1) and (sgOptions.Row <> ISQL_TERMINATOR_ROW) then
  254.   begin
  255.     MessageDlg('Invalid option value', mtError, [mbOK], 0);
  256.  
  257.     cbOptions.ItemIndex := 0;          // reset to first item in list
  258.     //Size and position the combo box to fit the cell
  259.     lR := sgOptions.CellRect(OPTION_VALUE_COL, sgOptions.Row);
  260.     lR.Left := lR.Left + sgOptions.Left;
  261.     lR.Right := lR.Right + sgOptions.Left;
  262.     lR.Top := lR.Top + sgOptions.Top;
  263.     lR.Bottom := lR.Bottom + sgOptions.Top;
  264.     cbOptions.Left := lR.Left + 1;
  265.     cbOptions.Top := lR.Top + 1;
  266.     cbOptions.Width := (lR.Right + 1) - lR.Left;
  267.     cbOptions.Height := (lR.Bottom + 1) - lR.Top;
  268.     cbOptions.SetFocus;
  269.   end
  270.   else if (sgOptions.Row = ISQL_TERMINATOR_ROW) and (sgOptions.Col = OPTION_VALUE_COL) then
  271.     sgOptions.Cells[sgOptions.Col,sgOptions.Row] := cbOptions.Text
  272.   else if (sgOptions.Col <> OPTION_NAME_COL) then
  273.     sgOptions.Cells[sgOptions.Col,sgOptions.Row] := cbOptions.Items[iIndex]
  274.   else
  275.     sgOptions.Cells[OPTION_VALUE_COL,sgOptions.Row] := cbOptions.Items[iIndex];
  276. end;
  277.  
  278. procedure TfrmSQLOptions.cbOptionsKeyDown(Sender: TObject; var Key: Word;
  279.   Shift: TShiftState);
  280. begin
  281.   inherited;
  282.   if (Key = VK_DOWN) and (ssAlt in Shift) then
  283.     cbOptions.DroppedDown := true;
  284. end;
  285.  
  286. procedure TfrmSQLOptions.sgOptionsDblClick(Sender: TObject);
  287. begin
  288.   inherited;
  289.   {
  290.   if sgOptions.Col = OPTION_VALUE_COL then
  291.   begin
  292.     if cbOptions.ItemIndex = cbOptions.Items.Count - 1 then
  293.       cbOptions.ItemIndex := 0
  294.     else
  295.       cbOptions.ItemIndex := cbOptions.ItemIndex + 1;
  296.  
  297.     sgOptions.Cells[sgOptions.Col,sgOptions.Row] := cbOptions.Items[cbOptions.ItemIndex];
  298.     cbOptions.Visible := false;
  299.     sgOptions.SetFocus;
  300.   end;
  301.   }
  302. end;
  303.  
  304. procedure TfrmSQLOptions.sgOptionsDrawCell(Sender: TObject; ACol,
  305.   ARow: Integer; Rect: TRect; State: TGridDrawState);
  306. const
  307.   INDENT = 2;
  308. var
  309.   lLeft: integer;
  310.   lText: string;
  311.  
  312. begin
  313.   inherited;
  314.   with sgOptions.canvas do
  315.   begin
  316.     if ACol = OPTION_VALUE_COL then
  317.     begin
  318.       font.color := clBlue;
  319.       if brush.color = clHighlight then
  320.         font.color := clWhite;
  321.       lText := sgOptions.Cells[ACol,ARow];
  322.       lLeft := Rect.Left + INDENT;
  323.       TextRect(Rect, lLeft, Rect.top + INDENT, lText);
  324.     end;
  325.   end;
  326. end;
  327.  
  328. procedure TfrmSQLOptions.sgOptionsSelectCell(Sender: TObject; ACol,
  329.   ARow: Integer; var CanSelect: Boolean);
  330. var
  331.   lR : TRect;
  332.   lName : TRect;
  333. begin
  334.   inherited;
  335.   cbOptions.Items.Clear;
  336.   case ARow of
  337.     DEFAULT_DIALECT_ROW:
  338.     begin
  339.       cbOptions.Items.Add('1');
  340.       cbOptions.Items.Add('2');
  341.       cbOptions.Items.Add('3');      
  342.     end;
  343.  
  344.     SHOW_QUERY_PLAN_ROW:
  345.     begin
  346.       cbOptions.Items.Add('True');
  347.       cbOptions.Items.Add('False');
  348.     end;
  349.     AUTO_COMMIT_DDL_ROW:
  350.     begin
  351.       cbOptions.Items.Add('True');
  352.       cbOptions.Items.Add('False');
  353.     end;
  354.     CHARACTER_SET_ROW:
  355.     begin
  356.       with cbOptions.Items do
  357.       begin
  358.         Add('ASCII');
  359.         Add('BIG_5');
  360.         Add('CYRL');
  361.         Add('DOS437');
  362.         Add('DOS850');
  363.         Add('DOS852');
  364.         Add('DOS857');
  365.         Add('DOS860');
  366.         Add('DOS861');
  367.         Add('DOS863');
  368.         Add('DOS865');
  369.         Add('EUCJ_0208');
  370.         Add('GB_2312');
  371.         Add('ISO8859_1');
  372.         Add('KSC_5601');
  373.         Add('NEXT');
  374.         Add('None');
  375.         Add('OCTETS');
  376.         Add('SJIS_0208');
  377.         Add('UNICODE_FSS');
  378.         Add('WIN1250');
  379.         Add('WIN1251');
  380.         Add('WIN1252');
  381.         Add('WIN1253');
  382.         Add('WIN1254');
  383.       end;
  384.     end;
  385.     BLOB_DISPLAY_ROW:
  386.     begin
  387.       cbOptions.Items.Add('Enabled');
  388.       cbOptions.Items.Add('Disabled');
  389.       cbOptions.Items.Add('Restrict');
  390.     end;
  391.     BLOB_SUBTYPE_ROW:
  392.     begin
  393.       cbOptions.Items.Add('Text');
  394.       cbOptions.Items.Add('Unknown');
  395.     end;
  396.     ISQL_TERMINATOR_ROW:
  397.     begin
  398.       cbOptions.Items.Add(';');
  399.     end;
  400.   end;
  401.  
  402.   pnlOptionName.Caption := sgOptions.Cells[OPTION_NAME_COL,ARow];
  403.  
  404.   if ACol = OPTION_NAME_COL then
  405.     cbOptions.ItemIndex := cbOptions.Items.IndexOf(sgOptions.Cells[ACol+1,ARow])
  406.   else if ACol = OPTION_VALUE_COL then
  407.   begin
  408.     cbOptions.ItemIndex := cbOptions.Items.IndexOf(sgOptions.Cells[ACol,ARow]);
  409.     if cbOptions.ItemIndex = -1 then
  410.       cbOptions.Text := sgOptions.Cells[ACol,ARow];
  411.   end;
  412.  
  413.   if ACol = OPTION_NAME_COL then
  414.   begin
  415.     lName := sgOptions.CellRect(ACol, ARow);
  416.     lR := sgOptions.CellRect(ACol + 1, ARow);
  417.   end
  418.   else
  419.   begin
  420.     lName := sgOptions.CellRect(ACol - 1, ARow);
  421.     lR := sgOptions.CellRect(ACol, ARow);
  422.   end;
  423.  
  424.   // lName := sgOptions.CellRect(ACol, ARow);
  425.   lName.Left := lName.Left + sgOptions.Left;
  426.   lName.Right := lName.Right + sgOptions.Left;
  427.   lName.Top := lName.Top + sgOptions.Top;
  428.   lName.Bottom := lName.Bottom + sgOptions.Top;
  429.   pnlOptionName.Left := lName.Left + 1;
  430.   pnlOptionName.Top := lName.Top + 1;
  431.   pnlOptionName.Width := (lName.Right + 1) - lName.Left;
  432.   pnlOptionName.Height := (lName.Bottom + 1) - lName.Top;
  433.   pnlOptionName.Visible := True;
  434.  
  435.   // lR := sgOptions.CellRect(ACol, ARow);
  436.   lR.Left := lR.Left + sgOptions.Left;
  437.   lR.Right := lR.Right + sgOptions.Left;
  438.   lR.Top := lR.Top + sgOptions.Top;
  439.   lR.Bottom := lR.Bottom + sgOptions.Top;
  440.   cbOptions.Left := lR.Left + 1;
  441.   cbOptions.Top := lR.Top + 1;
  442.   cbOptions.Width := (lR.Right + 1) - lR.Left;
  443.   cbOptions.Height := (lR.Bottom + 1) - lR.Top;
  444.   cbOptions.Visible := True;
  445.   cbOptions.SetFocus;
  446. end;
  447.  
  448. procedure TfrmSQLOptions.Button1Click(Sender: TObject);
  449. begin
  450.   inherited;
  451.   if btnApply.Enabled then
  452.     btnApply.Click;
  453.   Close;
  454. end;
  455.  
  456. procedure TfrmSQLOptions.FormShow(Sender: TObject);
  457. begin
  458.   inherited;
  459.   btnApply.Enabled := false;
  460. end;
  461.  
  462. procedure TfrmSQLOptions.Button2Click(Sender: TObject);
  463. begin
  464.   inherited;
  465.   ModalResult := mrCancel;
  466. end;
  467.  
  468. end.
  469.