restemplate/indy/Protocols/IdDsnSASLListEditorFormNET.pas

413 lines
13 KiB
Plaintext

unit IdDsnSASLListEditorFormNET;
interface
uses
Classes,
System.Drawing, System.Collections, System.ComponentModel,
System.Windows.Forms, System.Data, IdSASLCollection;
type
TfrmSASLListEditor = class(System.Windows.Forms.Form)
{$REGION 'Designer Managed Code'}
strict private
/// <summary>
/// Required designer variable.
/// </summary>
Components: System.ComponentModel.Container;
btnOk: System.Windows.Forms.Button;
btnCancel: System.Windows.Forms.Button;
lblAvailable: System.Windows.Forms.Label;
lblAssigned: System.Windows.Forms.Label;
lbAvailable: System.Windows.Forms.ListBox;
lbAssigned: System.Windows.Forms.ListBox;
btnRemove: System.Windows.Forms.Button;
btnAdd: System.Windows.Forms.Button;
btnUp: System.Windows.Forms.Button;
btnDown: System.Windows.Forms.Button;
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
procedure InitializeComponent;
procedure lbAvailable_SelectedIndexChanged(sender: System.Object; e: System.EventArgs);
procedure btnAdd_Click(sender: System.Object; e: System.EventArgs);
procedure btnRemove_Click(sender: System.Object; e: System.EventArgs);
procedure btnUp_Click(sender: System.Object; e: System.EventArgs);
procedure btnDown_Click(sender: System.Object; e: System.EventArgs);
{$ENDREGION}
strict protected
/// <summary>
/// Clean up any resources being used.
/// </summary>
procedure Dispose(Disposing: Boolean); override;
private
{ Private Declarations }
FSASLList: TIdSASLEntries;
FAvailObjs : TList;
procedure LoadBitmaps;
procedure UpdateList;
procedure UpdateGUI;
public
constructor Create;
procedure SetList(const CopyFrom: TIdSASLEntries);
procedure GetList(const CopyTo: TIdSASLEntries);
procedure SetComponentName(const Name: string);
function Execute : Boolean;
end;
[assembly: RuntimeRequiredAttribute(TypeOf(TfrmSASLListEditor))]
implementation
uses
System.Reflection, System.Resources,
IdDsnCoreResourceStrings,
IdGlobal,
IdResourceStrings,
IdSASL,
SysUtils;
{$R IdSASLListEditorForm.resources}
const
ResourceBaseName = 'IdSASLListEditorForm';
{$AUTOBOX ON}
{$REGION 'Windows Form Designer generated code'}
/// <summary>
/// Required method for Designer support -- do not modify
/// the contents of this method with the code editor.
/// </summary>
procedure TfrmSASLListEditor.InitializeComponent;
begin
Self.btnOk := System.Windows.Forms.Button.Create;
Self.btnCancel := System.Windows.Forms.Button.Create;
Self.lblAvailable := System.Windows.Forms.Label.Create;
Self.lblAssigned := System.Windows.Forms.Label.Create;
Self.lbAvailable := System.Windows.Forms.ListBox.Create;
Self.lbAssigned := System.Windows.Forms.ListBox.Create;
Self.btnAdd := System.Windows.Forms.Button.Create;
Self.btnRemove := System.Windows.Forms.Button.Create;
Self.btnUp := System.Windows.Forms.Button.Create;
Self.btnDown := System.Windows.Forms.Button.Create;
Self.SuspendLayout;
//
// btnOk
//
Self.btnOk.Anchor := (System.Windows.Forms.AnchorStyles((System.Windows.Forms.AnchorStyles.Bottom
or System.Windows.Forms.AnchorStyles.Right)));
Self.btnOk.DialogResult := System.Windows.Forms.DialogResult.OK;
Self.btnOk.Location := System.Drawing.Point.Create(294, 323);
Self.btnOk.Name := 'btnOk';
Self.btnOk.TabIndex := 0;
//
// btnCancel
//
Self.btnCancel.DialogResult := System.Windows.Forms.DialogResult.Cancel;
Self.btnCancel.Location := System.Drawing.Point.Create(374, 323);
Self.btnCancel.Name := 'btnCancel';
Self.btnCancel.TabIndex := 1;
//
// lblAvailable
//
Self.lblAvailable.AutoSize := True;
Self.lblAvailable.Location := System.Drawing.Point.Create(8, 8);
Self.lblAvailable.Name := 'lblAvailable';
Self.lblAvailable.Size := System.Drawing.Size.Create(38, 16);
Self.lblAvailable.TabIndex := 2;
Self.lblAvailable.Text := 'Label1';
//
// lblAssigned
//
Self.lblAssigned.Anchor := (System.Windows.Forms.AnchorStyles((System.Windows.Forms.AnchorStyles.Top
or System.Windows.Forms.AnchorStyles.Right)));
Self.lblAssigned.Location := System.Drawing.Point.Create(248, 8);
Self.lblAssigned.Name := 'lblAssigned';
Self.lblAssigned.Size := System.Drawing.Size.Create(168, 16);
Self.lblAssigned.TabIndex := 3;
Self.lblAssigned.Text := 'Label2';
//
// lbAvailable
//
Self.lbAvailable.Anchor := (System.Windows.Forms.AnchorStyles(((System.Windows.Forms.AnchorStyles.Top
or System.Windows.Forms.AnchorStyles.Bottom) or System.Windows.Forms.AnchorStyles.Left)));
Self.lbAvailable.Location := System.Drawing.Point.Create(8, 24);
Self.lbAvailable.Name := 'lbAvailable';
Self.lbAvailable.Size := System.Drawing.Size.Create(169, 277);
Self.lbAvailable.TabIndex := 4;
Include(Self.lbAvailable.SelectedIndexChanged, Self.lbAvailable_SelectedIndexChanged);
//
// lbAssigned
//
Self.lbAssigned.Anchor := (System.Windows.Forms.AnchorStyles(((System.Windows.Forms.AnchorStyles.Top
or System.Windows.Forms.AnchorStyles.Bottom) or System.Windows.Forms.AnchorStyles.Right)));
Self.lbAssigned.Location := System.Drawing.Point.Create(248, 24);
Self.lbAssigned.Name := 'lbAssigned';
Self.lbAssigned.Size := System.Drawing.Size.Create(169, 277);
Self.lbAssigned.TabIndex := 5;
Include(Self.lbAssigned.SelectedIndexChanged, Self.lbAvailable_SelectedIndexChanged);
//
// btnAdd
//
Self.btnAdd.Anchor := (System.Windows.Forms.AnchorStyles(((System.Windows.Forms.AnchorStyles.Top
or System.Windows.Forms.AnchorStyles.Left) or System.Windows.Forms.AnchorStyles.Right)));
Self.btnAdd.Location := System.Drawing.Point.Create(184, 88);
Self.btnAdd.Name := 'btnAdd';
Self.btnAdd.Size := System.Drawing.Size.Create(57, 23);
Self.btnAdd.TabIndex := 6;
Include(Self.btnAdd.Click, Self.btnAdd_Click);
//
// btnRemove
//
Self.btnRemove.Anchor := (System.Windows.Forms.AnchorStyles(((System.Windows.Forms.AnchorStyles.Top
or System.Windows.Forms.AnchorStyles.Left) or System.Windows.Forms.AnchorStyles.Right)));
Self.btnRemove.Location := System.Drawing.Point.Create(184, 128);
Self.btnRemove.Name := 'btnRemove';
Self.btnRemove.Size := System.Drawing.Size.Create(57, 23);
Self.btnRemove.TabIndex := 7;
Include(Self.btnRemove.Click, Self.btnRemove_Click);
//
// btnUp
//
Self.btnUp.Anchor := (System.Windows.Forms.AnchorStyles((System.Windows.Forms.AnchorStyles.Top
or System.Windows.Forms.AnchorStyles.Right)));
Self.btnUp.Location := System.Drawing.Point.Create(424, 88);
Self.btnUp.Name := 'btnUp';
Self.btnUp.Size := System.Drawing.Size.Create(23, 23);
Self.btnUp.TabIndex := 8;
Include(Self.btnUp.Click, Self.btnUp_Click);
//
// btnDown
//
Self.btnDown.Anchor := (System.Windows.Forms.AnchorStyles((System.Windows.Forms.AnchorStyles.Top
or System.Windows.Forms.AnchorStyles.Right)));
Self.btnDown.Location := System.Drawing.Point.Create(424, 128);
Self.btnDown.Name := 'btnDown';
Self.btnDown.Size := System.Drawing.Size.Create(23, 23);
Self.btnDown.TabIndex := 9;
Include(Self.btnDown.Click, Self.btnDown_Click);
//
// TfrmSASLListEditor
//
Self.AcceptButton := Self.btnOk;
Self.AutoScaleBaseSize := System.Drawing.Size.Create(5, 13);
Self.CancelButton := Self.btnCancel;
Self.ClientSize := System.Drawing.Size.Create(454, 354);
Self.Controls.Add(Self.btnDown);
Self.Controls.Add(Self.btnUp);
Self.Controls.Add(Self.btnRemove);
Self.Controls.Add(Self.btnAdd);
Self.Controls.Add(Self.lbAssigned);
Self.Controls.Add(Self.lbAvailable);
Self.Controls.Add(Self.lblAssigned);
Self.Controls.Add(Self.lblAvailable);
Self.Controls.Add(Self.btnCancel);
Self.Controls.Add(Self.btnOk);
Self.FormBorderStyle := System.Windows.Forms.FormBorderStyle.FixedDialog;
Self.MaximizeBox := False;
Self.MaximumSize := System.Drawing.Size.Create(460, 386);
Self.MinimizeBox := False;
Self.MinimumSize := System.Drawing.Size.Create(460, 386);
Self.Name := 'TfrmSASLListEditor';
Self.StartPosition := System.Windows.Forms.FormStartPosition.CenterScreen;
Self.Text := 'WinForm';
Self.ResumeLayout(False);
end;
{$ENDREGION}
procedure TfrmSASLListEditor.Dispose(Disposing: Boolean);
begin
if Disposing then
begin
if Components <> nil then begin
Components.Dispose();
end;
FreeAndNil(FSASLList);
FreeAndNil(FAvailObjs);
end;
inherited Dispose(Disposing);
end;
constructor TfrmSASLListEditor.Create;
begin
inherited Create;
//
// Required for Windows Form Designer support
//
InitializeComponent;
//
// TODO: Add any constructor code after InitializeComponent call
//
//captions
Text := RSADlgSLCaption;
lblAvailable.Text := RSADlgSLAvailable;
lblAssigned.Text := RSADlgSLAssigned;
FSASLList := TIdSASLEntries.Create(Self);
FAvailObjs := TList.Create;
LoadBitmaps;
btnCancel.Text := RSCancel;
btnOk.Text := RSOk;
end;
function TfrmSASLListEditor.Execute: Boolean;
begin
Result := Self.ShowDialog = System.Windows.Forms.DialogResult.OK;
end;
procedure TfrmSASLListEditor.btnDown_Click(sender: System.Object; e: System.EventArgs);
var
sel: integer;
begin
sel := lbAssigned.SelectedIndex;
if (sel >= 0) and (sel < lbAssigned.Items.Count-1) then begin
FSASLList.Items[sel].Index := sel+1;
Updatelist;
lbAssigned.SelectedIndex := sel+1;
end;
end;
procedure TfrmSASLListEditor.btnUp_Click(sender: System.Object; e: System.EventArgs);
var
sel : Integer;
begin
sel := lbAssigned.SelectedIndex;
// >0 is intentional, can't move the top element up!!
if sel > 0 then begin
FSASLList.Items[Sel].Index := sel-1;
UpdateList;
lbAssigned.SelectedIndex := sel-1;
end;
end;
procedure TfrmSASLListEditor.btnRemove_Click(sender: System.Object; e: System.EventArgs);
var
sel : Integer;
begin
sel := lbAssigned.SelectedIndex;
if sel >= 0 then
begin
FSASLList.Delete(sel);
end;
UpdateList;
end;
procedure TfrmSASLListEditor.btnAdd_Click(sender: System.Object; e: System.EventArgs);
var
sel: integer;
LCI : TIdSASLListEntry;
begin
sel := lbAvailable.SelectedIndex ;
if sel >= 0 then begin
LCI := FSASLList.Add;
LCI.SASL := TIdSASL(FAvailObjs[sel]);
// SASLList.Add(TIdSASL(lbAvailable.Items.Objects[sel]));
UpdateList;
end;
end;
procedure TfrmSASLListEditor.lbAvailable_SelectedIndexChanged(sender: System.Object;
e: System.EventArgs);
begin
UpdateGUI;
end;
procedure TfrmSASLListEditor.SetComponentName(const Name: string);
begin
Text := IndyFormat(RSADlgSLCaption, [Name]);
end;
procedure TfrmSASLListEditor.GetList(const CopyTo: TIdSASLEntries);
begin
CopyTo.Assign(FSASLList);
end;
procedure TfrmSASLListEditor.SetList(const CopyFrom: TIdSASLEntries);
var
i, idx: integer;
begin
FSASLList.Assign(CopyFrom);
for i := 0 to CopyFrom.Count-1 do begin
if Assigned(CopyFrom[i].SASL) then
begin
idx := lbAvailable.Items.IndexOf(CopyFrom[i].SASL.Name);
if idx >= 0 then begin
lbAvailable.Items.Remove(idx);
end;
end;
// SASLList.Add(CopyFrom[i]);
end;
// FListOwner := CopyFrom.Owner;
UpdateList;
end;
procedure TfrmSASLListEditor.LoadBitmaps;
var
LR: System.Resources.ResourceManager;
LB : Bitmap;
begin
LR := System.Resources.ResourceManager.Create(ResourceBaseName, System.Reflection.Assembly.GetExecutingAssembly);
try
LB := Bitmap(LR.GetObject( 'ARROWLEFT.bmp'));
LB.MakeTransparent;
Self.btnRemove.Image := LB;
LB := Bitmap(LR.GetObject( 'ARROWRIGHT.bmp'));
LB.MakeTransparent;
Self.btnAdd.Image := LB;
LB := Bitmap(LR.GetObject( 'ARROWUP.bmp'));
LB.MakeTransparent;
Self.btnUp.Image := LB;
LB := Bitmap(LR.GetObject( 'ARROWDOWN.bmp'));
LB.MakeTransparent;
Self.btnDown.Image := LB;
finally
FreeAndNil(LR);
end;
end;
procedure TfrmSASLListEditor.UpdateList;
var
i: integer;
l : TList;
begin
lbAssigned.Items.Clear;
FAvailObjs.Clear;
for i := 0 to FSASLList.Count-1 do begin
if Assigned(FSASLList[i].SASL) then begin
lbAssigned.Items.Add(FSASLList[i].SASL.Name + ': ' + FSASLList[i].SASL.ServiceName);
end;
end;
lbAvailable.Items.Clear;
l := GlobalSASLList.LockList;
try
for i := 0 to l.Count-1 do begin
if FSASLList.IndexOfComp(TIdSASL(l[i])) < 0 then begin
if Assigned(l[i]) then
begin
FAvailObjs.Add(l[i]);
lbAvailable.Items.Add(TIdSASL(l[i]).Name + ': ' + TIdSASL(l[i]).ServiceName);
end;
end;
end;
finally
GlobalSASLList.UnlockList;
end;
UpdateGUI;
end;
procedure TfrmSASLListEditor.UpdateGUI;
//This is necessary because unlike VCL, WinForms does not
//have a native ActionList.
begin
btnAdd.Enabled := (lbAvailable.Items.Count <> 0) and
(lbAvailable.SelectedIndex <> -1);
btnRemove.Enabled := (lbAssigned.Items.Count <> 0) and
(lbAssigned.SelectedIndex <> -1);
btnUp.Enabled := (lbAssigned.Items.Count > 1) and
(lbAssigned.SelectedIndex > 0); // -1 not selected and 0 = top
btnDown.Enabled := (lbAssigned.Items.Count > 1) and
(lbAssigned.SelectedIndex <> -1) and (lbAssigned.SelectedIndex < (lbAssigned.Items.Count - 1));
end;
end.