implemented streaming TCheckListBox checked states from Salvatore

git-svn-id: trunk@7313 -
This commit is contained in:
mattias 2005-07-02 09:17:20 +00:00
parent c55cac6e1a
commit 1cce85674d
3 changed files with 101 additions and 10 deletions

View File

@ -264,7 +264,6 @@ type
function GetVerbCount: Integer; override;
end;
{ TCheckListBoxComponentEditor
The default componenteditor for TCheckListBox }
@ -285,7 +284,7 @@ type
TCheckGroupComponentEditor = class(TDefaultComponentEditor)
protected
procedure DoShowEditor;
procedure AssignCheck(dstCheck, srcCheck: TCheckGroup);//; Full: boolean);
procedure AssignCheck(dstCheck, srcCheck: TCheckGroup);
public
procedure ExecuteVerb(Index: Integer); override;
function GetVerb(Index: Integer): string; override;
@ -1169,7 +1168,7 @@ begin
end;
end;
procedure TCheckListBoxComponentEditor.AssignCheck(dstCheck, srcCheck: TCheckListBox);// Full: boolean);
procedure TCheckListBoxComponentEditor.AssignCheck(dstCheck, srcCheck: TCheckListBox);
var i: integer;
begin
DstCheck.Items.Clear;
@ -1207,6 +1206,7 @@ Type
FBtnOK,FBtnCancel:TBitBtn;
FPanelButtons:TPanel;
FPanelOKCancel:TPanel;
FPopupMenu:TPopupMenu;
ItemIndex:integer;
protected
procedure AddItem(Sender:TObject);
@ -1215,6 +1215,8 @@ Type
procedure MoveDownItem(Sender:TObject);
procedure ModifyItem(Sender:TObject);
procedure ItemClick(Sender: TObject; Index: integer);
procedure EnableDisable(Sender:TObject);
procedure CreateItems(Sender:TObject);
public
constructor create(AOwner: TComponent); override;
destructor Destroy; override;
@ -1306,6 +1308,10 @@ begin
Height:=25;
end;
FPopupMenu:=TPopupMenu.Create(Self);
FPopupMenu.OnPopup:=@CreateItems;
FCheck.PopupMenu:=FPopupMenu;
//Bnt Ok
FBtnOK:=TBitBtn.Create(self);
with FBtnOK do begin
@ -1336,6 +1342,7 @@ begin
FreeThenNil(FBtnCancel);
FreeThenNil(FPanelOKCancel);
FreeThenNil(FPanelButtons);
FreeThenNil(FPopupMenu);
inherited Destroy
end;
@ -1362,12 +1369,18 @@ var itemtmp:string;
checkedtmp:boolean;
begin
if (FCheck.Items.Count<=1)or(ItemIndex<1) then exit;
//swap the caption and the checked states
itemtmp:=FCheck.Items[ItemIndex-1];
checkedtmp:=FCheck.Checked[ItemIndex-1];
FCheck.Items[ItemIndex-1]:=FCheck.Items[ItemIndex];
FCheck.Checked[ItemIndex-1]:=FCheck.Checked[ItemIndex];
FCheck.Items[ItemIndex]:=itemtmp;
FCheck.Checked[ItemIndex]:=checkedtmp;
//swap the states enabled
checkedtmp:=FCheck.CheckEnabled[ItemIndex-1];
FCheck.CheckEnabled[ItemIndex-1]:=FCheck.CheckEnabled[ItemIndex];
FCheck.CheckEnabled[ItemIndex]:=checkedtmp;
ItemIndex:=ItemIndex-1
end;
@ -1376,12 +1389,18 @@ var itemtmp:string;
checkedtmp:boolean;
begin
if (FCheck.Items.Count<=1)or(ItemIndex=FCheck.Items.Count-1)or(ItemIndex=-1) then exit;
//swap the caption and the checked states
itemtmp:=FCheck.Items[ItemIndex+1];
checkedtmp:=FCheck.Checked[ItemIndex+1];
FCheck.Items[ItemIndex+1]:=FCheck.Items[ItemIndex];
FCheck.Checked[ItemIndex+1]:=FCheck.Checked[ItemIndex];
FCheck.Items[ItemIndex]:=itemtmp;
FCheck.Checked[ItemIndex]:=checkedtmp;
//swap the states enabled
checkedtmp:=FCheck.CheckEnabled[ItemIndex+1];
FCheck.CheckEnabled[ItemIndex+1]:=FCheck.CheckEnabled[ItemIndex];
FCheck.CheckEnabled[ItemIndex]:=checkedtmp;
ItemIndex:=ItemIndex+1
end;
@ -1396,7 +1415,26 @@ begin
ItemIndex:=Index;
end;
{ TCheckGroupComponentEditor }
procedure TCheckGroupEditorDlg.EnableDisable(Sender:TObject);
var i:integer;
begin
for i:=0 to FCheck.Items.Count-1 do begin
if (Sender=FPopupMenu.Items[i]) then
FCheck.CheckEnabled[i]:=not FCheck.CheckEnabled[i]
end;
end;
procedure TCheckGroupEditorDlg.CreateItems(Sender:TObject);
var i:integer;
begin
FPopupMenu.Items.Clear;
for i:=0 to FCheck.Items.Count-1 do begin
FPopupMenu.Items.Add(TMenuItem.Create(self));
FPopupMenu.Items[i].Caption:=FCheck.Items[i];
FPopupMenu.Items[i].Checked:=FCheck.CheckEnabled[i];
FPopupMenu.Items[i].OnClick:=@EnableDisable;
end;;
end;
procedure TCheckGroupComponentEditor.DoShowEditor;
var Dlg : TCheckGroupEditorDlg;
@ -1430,9 +1468,8 @@ begin
DstCheck.Items:=srcCheck.Items;
DstCheck.Caption:=srcCheck.Caption;
for i:=0 to srcCheck.Items.Count-1 do begin
if srcCheck.Items[i]<>dstCheck.Items[i] then
dstCheck.Items[i]:=srcCheck.Items[i];
dstCheck.Checked[i]:=srcCheck.Checked[i]
dstCheck.Checked[i]:=srcCheck.Checked[i];
dstCheck.CheckEnabled[i]:=srcCheck.CheckEnabled[i]
end;
end;

View File

@ -28,8 +28,8 @@ unit CheckLst;
interface
uses
Classes, SysUtils, LCLType, GraphType, Graphics, LMessages, Controls,
StdCtrls;
Classes, SysUtils, LCLType, GraphType, Graphics, LMessages, LResources,
Controls, StdCtrls;
type
@ -45,6 +45,9 @@ type
procedure AssignItemDataToCache(const AIndex: Integer; const AData: Pointer); override;
procedure AssignCacheToItemData(const AIndex: Integer; const AData: Pointer); override;
function GetCachedDataSize: Integer; override;
procedure DefineProperties(Filer: TFiler); override;
procedure ReadData(Stream: TStream);
procedure WriteData(Stream: TStream);
public
constructor Create(AOwner: TComponent); override;
property Checked[const AIndex: Integer]: Boolean read GetChecked write SetChecked;
@ -155,11 +158,59 @@ begin
else PCachedItemData(GetCachedData(AIndex) + FItemDataOffset)^ := AValue;
end;
procedure TCustomCheckListBox.DefineProperties(Filer: TFiler);
begin
inherited DefineProperties(Filer);
Filer.DefineBinaryProperty('Data', @ReadData, @WriteData,Items.Count>0);
end;
procedure TCustomCheckListBox.ReadData(Stream: TStream);
var
ChecksCount: integer;
Checks: string;
i: Integer;
v: Integer;
begin
ChecksCount:=ReadLRSInteger(Stream);
if ChecksCount>0 then begin
SetLength(Checks,ChecksCount);
Stream.ReadBuffer(Checks[1], ChecksCount);
for i:=0 to ChecksCount-1 do begin
v:=ord(Checks[i+1]);
Checked[i]:=((v and 1)>0);
end;
end;
end;
procedure TCustomCheckListBox.WriteData(Stream: TStream);
var
ChecksCount: integer;
Checks: string;
i: Integer;
v: Integer;
begin
ChecksCount:=Items.Count;
WriteLRSInteger(Stream,ChecksCount);
if ChecksCount>0 then begin
SetLength(Checks,ChecksCount);
for i:=0 to ChecksCount-1 do begin
v:=0;
if Checked[i] then inc(v,1);
Checks[i+1]:=chr(v);
end;
Stream.WriteBuffer(Checks[1], ChecksCount);
end;
end;
end.
{ =============================================================================
$Log$
Revision 1.10 2005/07/02 09:17:20 mattias
implemented streaming TCheckListBox checked states from Salvatore
Revision 1.9 2004/12/27 19:40:59 mattias
published BorderSpacing for many controls

View File

@ -208,7 +208,7 @@ end;
procedure TCustomCheckGroup.DefineProperties(Filer: TFiler);
begin
inherited DefineProperties(Filer);
Filer.DefineBinaryProperty('Data', @ReadData, @WriteData,true);
Filer.DefineBinaryProperty('Data', @ReadData, @WriteData,FItems.Count>0);
end;
procedure TCustomCheckGroup.ReadData(Stream: TStream);
@ -275,6 +275,9 @@ end;
{
$Log$
Revision 1.12 2005/07/02 09:17:20 mattias
implemented streaming TCheckListBox checked states from Salvatore
Revision 1.11 2005/02/26 17:08:41 marc
* Reworked listviews to match new interface