Files
HeidiSQL/source/connections.pas

348 lines
10 KiB
ObjectPascal

unit connections;
// -------------------------------------
// Connections (start-window)
// -------------------------------------
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Buttons, ExtCtrls, ZPlainMySqlDriver,
PngSpeedButton, TntStdCtrls, ComCtrls, ToolWin;
type
Tconnform = class(TForm)
editHost: TEdit;
lblHost: TLabel;
lblUsername: TLabel;
editUsername: TEdit;
lblPassword: TLabel;
editPassword: TEdit;
lblPort: TLabel;
editPort: TEdit;
lblTimeout: TLabel;
editTimeout: TEdit;
pnlLogo: TPanel;
comboSession: TComboBox;
imgLogo: TImage;
lblSession: TLabel;
btnCancel: TButton;
btnConnect: TButton;
chkCompressed: TCheckBox;
lblSeconds: TLabel;
lblOnlyDBs: TLabel;
editOnlyDBs: TTntEdit;
chkSorted: TCheckBox;
btnSaveAndConnect: TButton;
tlbEdit: TToolBar;
btnNew: TToolButton;
btnSave: TToolButton;
btnDelete: TToolButton;
btnSaveAs: TToolButton;
btnEditDesc: TButton;
procedure FormCreate(Sender: TObject);
procedure btnSaveAndConnectClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure btnConnectClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure btnSaveClick(Sender: TObject);
procedure btnSaveAsClick(Sender: TObject);
procedure btnNewClick(Sender: TObject);
procedure btnDeleteClick(Sender: TObject);
procedure comboSessionSelect(Sender: TObject);
procedure Modified(Sender: TObject);
procedure ButtonEditDescClick(Sender: TObject);
private
{ Private declarations }
procedure FillSessionCombo(Sender: TObject);
public
{ Public declarations }
end;
implementation
uses Main, helpers, MysqlQueryThread;
{$I const.inc}
{$R *.DFM}
{**
FormCreate
}
procedure Tconnform.FormCreate(Sender: TObject);
begin
InheritFont(Font);
end;
// Connect
procedure Tconnform.btnConnectClick(Sender: TObject);
var
btn: TButton;
begin
Screen.Cursor := crHourglass;
// Save last connection name to registry
OpenRegistry;
MainReg.WriteString(REGNAME_LASTSESSION, comboSession.Text);
btn := Sender as TButton;
btn.Enabled := false;
if Mainform.InitConnection(
editHost.Text,
editPort.Text,
editUsername.Text,
editPassword.Text,
editOnlyDBs.Text,
editTimeout.Text,
IntToStr(Integer(chkCompressed.Checked)),
IntToStr(Integer(chkSorted.Checked))) then begin
ModalResult := mrOK;
Mainform.SessionName := comboSession.Text;
end else begin
ModalResult := mrNone;
btn.Enabled := True;
end;
Screen.Cursor := crDefault;
end;
// Read all connections from registry
procedure Tconnform.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
end;
procedure Tconnform.FillSessionCombo(Sender: TObject);
begin
comboSession.Items.Clear;
if MainReg.OpenKey(REGPATH + REGKEY_SESSIONS, true) then
MainReg.GetKeyNames(comboSession.Items);
if comboSession.Items.Count > 0 then begin
comboSession.ItemIndex := 0;
comboSessionSelect(Sender);
end;
end;
procedure Tconnform.FormShow(Sender: TObject);
var
LastSessionIndex: Integer;
begin
Screen.Cursor := crHourglass;
FillSessionCombo(Sender);
LastSessionIndex := comboSession.Items.IndexOf(GetRegValue(REGNAME_LASTSESSION, ''));
if LastSessionIndex > -1 then begin
comboSession.ItemIndex := LastSessionIndex;
comboSessionSelect(Sender);
end;
comboSession.SetFocus;
Screen.Cursor := crDefault;
end;
procedure Tconnform.btnSaveAndConnectClick(Sender: TObject);
begin
btnSaveClick(Sender);
btnConnectClick(Sender);
end;
procedure Tconnform.btnSaveClick(Sender: TObject);
begin
// save connection!
Screen.Cursor := crHourglass;
OpenRegistry(comboSession.Text);
MainReg.WriteString(REGNAME_HOST, editHost.Text);
MainReg.WriteString(REGNAME_USER, editUsername.Text);
MainReg.WriteString(REGNAME_PASSWORD, encrypt(editPassword.Text));
MainReg.WriteString(REGNAME_PORT, editPort.Text);
MainReg.WriteString(REGNAME_TIMEOUT, editTimeout.Text);
MainReg.WriteBool(REGNAME_COMPRESSED, chkCompressed.Checked);
MainReg.WriteString(REGNAME_ONLYDBS, Utf8Encode(editOnlyDBs.Text));
MainReg.WriteBool(REGNAME_ONLYDBSSORTED, chkSorted.Checked);
comboSessionSelect(Sender);
Screen.Cursor := crDefault;
end;
procedure Tconnform.btnSaveAsClick(Sender: TObject);
var
newName: String;
NameOK: Boolean;
begin
// Save as ...
newName := 'Enter new session name ...';
NameOK := False;
OpenRegistry;
while not NameOK do begin
if not InputQuery('Clone session ...', 'New session name:', newName) then
Exit; // Cancelled
NameOK := not MainReg.KeyExists(REGKEY_SESSIONS + newName);
if not NameOK then
MessageDlg('Session name '''+newName+''' already in use.', mtError, [mbOK], 0)
else begin
Screen.Cursor := crHourglass;
MainReg.MoveKey(REGKEY_SESSIONS + comboSession.Text, REGKEY_SESSIONS + newName, False);
Screen.Cursor := crDefault;
FillSessionCombo(Sender);
comboSession.ItemIndex := comboSession.Items.IndexOf(newName);
comboSessionSelect(Sender);
end;
end;
end;
procedure Tconnform.btnNewClick(Sender: TObject);
var
i : Integer;
session : String;
begin
// save new connection!
i := 0;
session := 'New session';
while MainReg.KeyExists(REGPATH + REGKEY_SESSIONS + session) do begin
inc(i);
session := 'New session' + ' (' + inttostr(i) + ')';
end;
if not InputQuery('New session ...', 'Session name:', session) then
exit;
if MainReg.KeyExists(REGPATH + REGKEY_SESSIONS + session) then
begin
MessageDlg('Session "' + session + '" already exists!', mtError, [mbOK], 0);
exit;
end;
Screen.Cursor := crHourglass;
OpenRegistry(session);
MainReg.WriteString(REGNAME_HOST, DEFAULT_HOST);
MainReg.WriteString(REGNAME_USER, DEFAULT_USER);
MainReg.WriteString(REGNAME_PASSWORD, encrypt(DEFAULT_PASSWORD));
MainReg.WriteString(REGNAME_PORT, inttostr(DEFAULT_PORT));
MainReg.WriteString(REGNAME_TIMEOUT, inttostr(DEFAULT_TIMEOUT));
MainReg.WriteBool(REGNAME_COMPRESSED, DEFAULT_COMPRESSED);
MainReg.WriteString(REGNAME_ONLYDBS, '');
MainReg.WriteBool(REGNAME_ONLYDBSSORTED, DEFAULT_ONLYDBSSORTED);
// show parameters:
FillSessionCombo(Sender);
comboSession.ItemIndex := comboSession.Items.IndexOf(session);
comboSessionSelect(Sender);
Screen.Cursor := crDefault;
end;
procedure Tconnform.btnDeleteClick(Sender: TObject);
begin
if MessageDlg('Delete session "' + comboSession.Text + '" ?', mtConfirmation, [mbYes, mbCancel], 0) = mrYes then
begin
if not MainReg.DeleteKey(REGPATH + REGKEY_SESSIONS + comboSession.Text) then
MessageDlg('Error while deleting session from Registry!', mtError, [mbOK], 0);
FillSessionCombo(Sender);
end;
end;
procedure Tconnform.comboSessionSelect(Sender: TObject);
var
Session: String;
SessionSelected: Boolean;
begin
// select one connection!
Screen.Cursor := crHourglass;
OpenRegistry;
Session := comboSession.Text;
SessionSelected := (Session <> '') and MainReg.KeyExists(REGPATH + REGKEY_SESSIONS + Session);
if SessionSelected then begin
editHost.Text := GetRegValue(REGNAME_HOST, '', Session);
editUsername.Text := GetRegValue(REGNAME_USER, '', Session);
editPassword.Text := decrypt(GetRegValue(REGNAME_PASSWORD, '', Session));
editPort.Text := GetRegValue(REGNAME_PORT, '', Session);
editTimeout.Text := GetRegValue(REGNAME_TIMEOUT, '', Session);
chkCompressed.Checked := GetRegValue(REGNAME_COMPRESSED, DEFAULT_COMPRESSED, Session);
editOnlyDBs.Text := Utf8Decode(GetRegValue(REGNAME_ONLYDBS, '', Session));
chkSorted.Checked := GetRegValue(REGNAME_ONLYDBSSORTED, DEFAULT_ONLYDBSSORTED, Session);
end else begin
editHost.Text := '';
editUsername.Text := '';
editPassword.Text := '';
editPort.Text := '';
editTimeout.Text := '';
chkCompressed.Checked := False;
editOnlyDBs.Text := '';
chkSorted.Checked := False;
end;
btnConnect.Enabled := SessionSelected;
btnSave.Enabled := SessionSelected;
btnSaveAndConnect.Enabled := SessionSelected;
btnDelete.Enabled := SessionSelected;
btnEditDesc.Enabled := SessionSelected;
editHost.Enabled := SessionSelected;
editUsername.Enabled := SessionSelected;
editPassword.Enabled := SessionSelected;
editPort.Enabled := SessionSelected;
editTimeout.Enabled := SessionSelected;
editOnlyDBs.Enabled := SessionSelected;
chkCompressed.Enabled := SessionSelected;
chkSorted.Enabled := SessionSelected;
lblHost.Enabled := SessionSelected;
lblUsername.Enabled := SessionSelected;
lblPassword.Enabled := SessionSelected;
lblPort.Enabled := SessionSelected;
lblTimeout.Enabled := SessionSelected;
lblSession.Enabled := SessionSelected;
lblSeconds.Enabled := SessionSelected;
lblOnlyDBs.Enabled := SessionSelected;
Screen.Cursor := crDefault;
end;
procedure Tconnform.Modified(Sender: TObject);
begin
btnSave.Enabled := true;
btnSaveAndConnect.Enabled := true;
chkSorted.Enabled := editOnlyDBs.Text <> '';
end;
{ rename session }
procedure Tconnform.ButtonEditDescClick(Sender: TObject);
var
newdesc, olddesc : String;
idx : Integer;
begin
olddesc := comboSession.Text;
newdesc := olddesc;
if not InputQuery('Rename session ...', 'Rename session:', newdesc) then
exit;
if newdesc = olddesc then
exit;
if comboSession.Items.IndexOf(newdesc) > -1 then begin
MessageDLG('Session "'+newdesc+'" already exists!', mtError, [mbCancel], 0);
exit;
end;
idx := comboSession.ItemIndex;
try
MainReg.MoveKey(REGPATH + REGKEY_SESSIONS + olddesc, REGPATH + REGKEY_SESSIONS + newdesc, true);
comboSession.Items[comboSession.ItemIndex] := newdesc;
comboSession.ItemIndex := idx;
comboSessionSelect(Sender);
except
MessageDLG('Error on renaming.', mtError, [mbCancel], 0);
end;
end;
end.