mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-10 02:28:04 +02:00
implemented streaming TCheckListBox checked states from Salvatore
git-svn-id: trunk@7313 -
This commit is contained in:
parent
c55cac6e1a
commit
1cce85674d
@ -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;
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user