git-svn-id: https://192.168.0.254/svn/Componentes.Terceros.SDAC@3 6f543ec7-021b-7e4c-98c9-62eafc7fb9a8
262 lines
5.8 KiB
ObjectPascal
262 lines
5.8 KiB
ObjectPascal
|
|
//////////////////////////////////////////////////
|
|
// DB Access Components
|
|
// Copyright © 1998-2007 Core Lab. All right reserved.
|
|
// Collection Frame
|
|
//////////////////////////////////////////////////
|
|
|
|
{$IFNDEF CLR}
|
|
|
|
{$I Dac.inc}
|
|
|
|
unit CRColFrame;
|
|
{$ENDIF}
|
|
|
|
interface
|
|
|
|
uses
|
|
{$IFDEF MSWINDOWS}
|
|
Windows, Messages, Graphics, Controls, Forms,
|
|
Dialogs, StdCtrls, ExtCtrls,
|
|
{$ENDIF}
|
|
{$IFDEF LINUX}
|
|
QStdCtrls, QExtCtrls, QControls, QGraphics, QForms,
|
|
{$ENDIF}
|
|
Classes, SysUtils,
|
|
CRFrame, CRTabEditor;
|
|
|
|
type
|
|
TCRColFrame = class(TCRFrame)
|
|
lbItemName: TListBox;
|
|
PanelItem: TPanel;
|
|
procedure lbItemNameClick(Sender: TObject);
|
|
|
|
protected
|
|
FOldItemIndex: integer;
|
|
|
|
FInStoreItem, FInSelectItem: boolean;
|
|
|
|
function GetItems: TCollection; virtual;
|
|
function GetItemName(Item: TCollectionItem): string; virtual;
|
|
procedure InitItems; virtual;
|
|
procedure StoreItem;
|
|
function IsControlEnabled(Control: TControl): boolean;
|
|
procedure ItemToControls(Item: TCollectionItem); virtual;
|
|
procedure ControlsToItem(Item: TCollectionItem); virtual;
|
|
procedure UpdateControlState(Control: TControl);
|
|
procedure UpdateControlsState; virtual;
|
|
|
|
procedure DoActivate; override;
|
|
procedure DoFinish; override;
|
|
|
|
property Items: TCollection read GetItems;
|
|
public
|
|
procedure SelectItem;
|
|
end;
|
|
|
|
implementation
|
|
|
|
{$IFDEF IDE}
|
|
{$R *.dfm}
|
|
{$ENDIF}
|
|
{$IFDEF MSWINDOWS}
|
|
{$R CRColFrame.dfm}
|
|
{$ENDIF}
|
|
{$IFDEF LINUX}
|
|
{$R *.xfm}
|
|
{$ENDIF}
|
|
|
|
uses
|
|
DB, DASQLEditor;
|
|
|
|
function TCRColFrame.GetItems: TCollection;
|
|
begin
|
|
Result := nil;
|
|
Assert(False, 'Must be overriden');
|
|
end;
|
|
|
|
function TCRColFrame.GetItemName(Item: TCollectionItem): string;
|
|
begin
|
|
Result := '';
|
|
Assert(False, 'Must be overriden');
|
|
end;
|
|
|
|
procedure TCRColFrame.ItemToControls(Item: TCollectionItem);
|
|
begin
|
|
Assert(False, 'Must be overriden');
|
|
end;
|
|
|
|
procedure TCRColFrame.ControlsToItem(Item: TCollectionItem);
|
|
begin
|
|
Assert(False, 'Must be overriden');
|
|
end;
|
|
|
|
procedure TCRColFrame.InitItems;
|
|
var
|
|
i: integer;
|
|
OldIndex: integer;
|
|
begin
|
|
OldIndex := lbItemName.ItemIndex;
|
|
lbItemName.Items.Clear;
|
|
Enabled := Items.Count > 0;
|
|
if not Enabled then begin
|
|
UpdateControlsState;
|
|
if (Editor.ActiveControl = nil) and (TCRTabEditorForm(Editor).PageControl.ActivePage = Page) then
|
|
Editor.ActiveControl := Page;
|
|
Exit;
|
|
end;
|
|
FOldItemIndex := -1;
|
|
|
|
for i := 0 to Items.Count - 1 do
|
|
lbItemName.Items.Add(GetItemName(Items.Items[i]));
|
|
|
|
if (OldIndex >= 0) and (OldIndex < Items.Count) then
|
|
lbItemName.ItemIndex := OldIndex
|
|
else
|
|
lbItemName.ItemIndex := 0;
|
|
|
|
SelectItem;
|
|
end;
|
|
|
|
function TCRColFrame.IsControlEnabled(Control: TControl): boolean;
|
|
begin
|
|
Result := Enabled and Control.Enabled and Control.Parent.Enabled and Control.Visible;
|
|
end;
|
|
|
|
procedure TCRColFrame.UpdateControlState(Control: TControl);
|
|
var
|
|
e: boolean;
|
|
begin
|
|
e := IsControlEnabled(Control);
|
|
|
|
if Control is TComboBox then begin
|
|
if e then
|
|
TComboBox(Control).Color := clWindow
|
|
else
|
|
begin
|
|
TComboBox(Control).Color := clBtnFace;
|
|
TComboBox(Control).ItemIndex := -1;
|
|
end;
|
|
end
|
|
else
|
|
if Control is TEdit then begin
|
|
if e then begin
|
|
TEdit(Control).Color := clWindow;
|
|
TEdit(Control).ParentFont := True;
|
|
end
|
|
else
|
|
begin
|
|
TEdit(Control).Color := clBtnFace;
|
|
TEdit(Control).Font.Color := clBtnFace;
|
|
TEdit(Control).Text := '';
|
|
end;
|
|
end
|
|
else
|
|
if Control is TMemo then begin
|
|
if e then begin
|
|
TMemo(Control).Color := clWindow;
|
|
TMemo(Control).ParentFont := True;
|
|
end
|
|
else
|
|
begin
|
|
TMemo(Control).Color := clBtnFace;
|
|
TMemo(Control).Font.Color := clBtnFace;
|
|
TMemo(Control).Text := '';
|
|
end;
|
|
end
|
|
else
|
|
if not (Control is TLabel) and not (Control is TButton) and
|
|
not (Control is TCheckBox) then
|
|
Assert(False, Control.Name + ' is ' + Control.ClassName);
|
|
end;
|
|
|
|
procedure TCRColFrame.UpdateControlsState;
|
|
var
|
|
i: integer;
|
|
begin
|
|
for i := 0 to PanelItem.ControlCount - 1 do
|
|
UpdateControlState(PanelItem.Controls[i]);
|
|
end;
|
|
|
|
procedure TCRColFrame.StoreItem;
|
|
var
|
|
Item: TCollectionItem;
|
|
begin
|
|
if (FOldItemIndex <> - 1) and
|
|
(Items.Count > FOldItemIndex) then begin
|
|
Item := Items.Items[FOldItemIndex];
|
|
FInStoreItem := True;
|
|
try
|
|
ControlsToItem(Item);
|
|
finally
|
|
FInStoreItem := False;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure TCRColFrame.SelectItem;
|
|
var
|
|
Item: TCollectionItem;
|
|
OldModified: boolean;
|
|
i: integer;
|
|
|
|
begin
|
|
OldModified := Modified;
|
|
FInSelectItem := True;
|
|
try
|
|
PanelItem.Enabled := lbItemName.ItemIndex <> - 1;
|
|
|
|
if PanelItem.Enabled then begin
|
|
for i := 0 to PanelItem.ControlCount - 1 do
|
|
PanelItem.Controls[i].Enabled := True;
|
|
|
|
Item := Items.Items[lbItemName.ItemIndex];
|
|
ItemToControls(Item);
|
|
|
|
FOldItemIndex := lbItemName.ItemIndex;
|
|
end;
|
|
|
|
finally
|
|
UpdateControlsState;
|
|
FInSelectItem := False;
|
|
Modified := OldModified;
|
|
end;
|
|
end;
|
|
|
|
procedure TCRColFrame.DoActivate;
|
|
begin
|
|
inherited;
|
|
|
|
// on processing error in ControlsToItem FInStoreItem maybe True
|
|
if not FInStoreItem then
|
|
InitItems;
|
|
end;
|
|
|
|
procedure TCRColFrame.DoFinish;
|
|
begin
|
|
inherited;
|
|
{
|
|
Temporary commented to avoid folowing situations:
|
|
1. Set DataType to Integer
|
|
2. Set value to 'qqqq'
|
|
3. Press Cancel button
|
|
4. Press 'Yes'
|
|
|
|
Assert(Owner is TDASQLEditorForm);
|
|
if (TDASQLEditorForm(Owner).ActiveControl <> TDASQLEditorForm(Owner).btCancel)
|
|
and (TDASQLEditorForm(Owner).ActiveControl <> nil) then
|
|
}
|
|
|
|
StoreItem;
|
|
end;
|
|
|
|
procedure TCRColFrame.lbItemNameClick(Sender: TObject);
|
|
begin
|
|
if lbItemName.ItemIndex <> FOldItemIndex then begin
|
|
StoreItem;
|
|
SelectItem;
|
|
end;
|
|
end;
|
|
|
|
end.
|