mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-18 18:19:08 +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;
|
function GetVerbCount: Integer; override;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
{ TCheckListBoxComponentEditor
|
{ TCheckListBoxComponentEditor
|
||||||
The default componenteditor for TCheckListBox }
|
The default componenteditor for TCheckListBox }
|
||||||
|
|
||||||
@ -285,7 +284,7 @@ type
|
|||||||
TCheckGroupComponentEditor = class(TDefaultComponentEditor)
|
TCheckGroupComponentEditor = class(TDefaultComponentEditor)
|
||||||
protected
|
protected
|
||||||
procedure DoShowEditor;
|
procedure DoShowEditor;
|
||||||
procedure AssignCheck(dstCheck, srcCheck: TCheckGroup);//; Full: boolean);
|
procedure AssignCheck(dstCheck, srcCheck: TCheckGroup);
|
||||||
public
|
public
|
||||||
procedure ExecuteVerb(Index: Integer); override;
|
procedure ExecuteVerb(Index: Integer); override;
|
||||||
function GetVerb(Index: Integer): string; override;
|
function GetVerb(Index: Integer): string; override;
|
||||||
@ -1169,7 +1168,7 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCheckListBoxComponentEditor.AssignCheck(dstCheck, srcCheck: TCheckListBox);// Full: boolean);
|
procedure TCheckListBoxComponentEditor.AssignCheck(dstCheck, srcCheck: TCheckListBox);
|
||||||
var i: integer;
|
var i: integer;
|
||||||
begin
|
begin
|
||||||
DstCheck.Items.Clear;
|
DstCheck.Items.Clear;
|
||||||
@ -1207,6 +1206,7 @@ Type
|
|||||||
FBtnOK,FBtnCancel:TBitBtn;
|
FBtnOK,FBtnCancel:TBitBtn;
|
||||||
FPanelButtons:TPanel;
|
FPanelButtons:TPanel;
|
||||||
FPanelOKCancel:TPanel;
|
FPanelOKCancel:TPanel;
|
||||||
|
FPopupMenu:TPopupMenu;
|
||||||
ItemIndex:integer;
|
ItemIndex:integer;
|
||||||
protected
|
protected
|
||||||
procedure AddItem(Sender:TObject);
|
procedure AddItem(Sender:TObject);
|
||||||
@ -1215,6 +1215,8 @@ Type
|
|||||||
procedure MoveDownItem(Sender:TObject);
|
procedure MoveDownItem(Sender:TObject);
|
||||||
procedure ModifyItem(Sender:TObject);
|
procedure ModifyItem(Sender:TObject);
|
||||||
procedure ItemClick(Sender: TObject; Index: integer);
|
procedure ItemClick(Sender: TObject; Index: integer);
|
||||||
|
procedure EnableDisable(Sender:TObject);
|
||||||
|
procedure CreateItems(Sender:TObject);
|
||||||
public
|
public
|
||||||
constructor create(AOwner: TComponent); override;
|
constructor create(AOwner: TComponent); override;
|
||||||
destructor Destroy; override;
|
destructor Destroy; override;
|
||||||
@ -1306,6 +1308,10 @@ begin
|
|||||||
Height:=25;
|
Height:=25;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
FPopupMenu:=TPopupMenu.Create(Self);
|
||||||
|
FPopupMenu.OnPopup:=@CreateItems;
|
||||||
|
FCheck.PopupMenu:=FPopupMenu;
|
||||||
|
|
||||||
//Bnt Ok
|
//Bnt Ok
|
||||||
FBtnOK:=TBitBtn.Create(self);
|
FBtnOK:=TBitBtn.Create(self);
|
||||||
with FBtnOK do begin
|
with FBtnOK do begin
|
||||||
@ -1336,6 +1342,7 @@ begin
|
|||||||
FreeThenNil(FBtnCancel);
|
FreeThenNil(FBtnCancel);
|
||||||
FreeThenNil(FPanelOKCancel);
|
FreeThenNil(FPanelOKCancel);
|
||||||
FreeThenNil(FPanelButtons);
|
FreeThenNil(FPanelButtons);
|
||||||
|
FreeThenNil(FPopupMenu);
|
||||||
inherited Destroy
|
inherited Destroy
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -1362,12 +1369,18 @@ var itemtmp:string;
|
|||||||
checkedtmp:boolean;
|
checkedtmp:boolean;
|
||||||
begin
|
begin
|
||||||
if (FCheck.Items.Count<=1)or(ItemIndex<1) then exit;
|
if (FCheck.Items.Count<=1)or(ItemIndex<1) then exit;
|
||||||
|
//swap the caption and the checked states
|
||||||
itemtmp:=FCheck.Items[ItemIndex-1];
|
itemtmp:=FCheck.Items[ItemIndex-1];
|
||||||
checkedtmp:=FCheck.Checked[ItemIndex-1];
|
checkedtmp:=FCheck.Checked[ItemIndex-1];
|
||||||
FCheck.Items[ItemIndex-1]:=FCheck.Items[ItemIndex];
|
FCheck.Items[ItemIndex-1]:=FCheck.Items[ItemIndex];
|
||||||
FCheck.Checked[ItemIndex-1]:=FCheck.Checked[ItemIndex];
|
FCheck.Checked[ItemIndex-1]:=FCheck.Checked[ItemIndex];
|
||||||
FCheck.Items[ItemIndex]:=itemtmp;
|
FCheck.Items[ItemIndex]:=itemtmp;
|
||||||
FCheck.Checked[ItemIndex]:=checkedtmp;
|
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
|
ItemIndex:=ItemIndex-1
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -1376,12 +1389,18 @@ var itemtmp:string;
|
|||||||
checkedtmp:boolean;
|
checkedtmp:boolean;
|
||||||
begin
|
begin
|
||||||
if (FCheck.Items.Count<=1)or(ItemIndex=FCheck.Items.Count-1)or(ItemIndex=-1) then exit;
|
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];
|
itemtmp:=FCheck.Items[ItemIndex+1];
|
||||||
checkedtmp:=FCheck.Checked[ItemIndex+1];
|
checkedtmp:=FCheck.Checked[ItemIndex+1];
|
||||||
FCheck.Items[ItemIndex+1]:=FCheck.Items[ItemIndex];
|
FCheck.Items[ItemIndex+1]:=FCheck.Items[ItemIndex];
|
||||||
FCheck.Checked[ItemIndex+1]:=FCheck.Checked[ItemIndex];
|
FCheck.Checked[ItemIndex+1]:=FCheck.Checked[ItemIndex];
|
||||||
FCheck.Items[ItemIndex]:=itemtmp;
|
FCheck.Items[ItemIndex]:=itemtmp;
|
||||||
FCheck.Checked[ItemIndex]:=checkedtmp;
|
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
|
ItemIndex:=ItemIndex+1
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -1396,7 +1415,26 @@ begin
|
|||||||
ItemIndex:=Index;
|
ItemIndex:=Index;
|
||||||
end;
|
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;
|
procedure TCheckGroupComponentEditor.DoShowEditor;
|
||||||
var Dlg : TCheckGroupEditorDlg;
|
var Dlg : TCheckGroupEditorDlg;
|
||||||
@ -1430,9 +1468,8 @@ begin
|
|||||||
DstCheck.Items:=srcCheck.Items;
|
DstCheck.Items:=srcCheck.Items;
|
||||||
DstCheck.Caption:=srcCheck.Caption;
|
DstCheck.Caption:=srcCheck.Caption;
|
||||||
for i:=0 to srcCheck.Items.Count-1 do begin
|
for i:=0 to srcCheck.Items.Count-1 do begin
|
||||||
if srcCheck.Items[i]<>dstCheck.Items[i] then
|
dstCheck.Checked[i]:=srcCheck.Checked[i];
|
||||||
dstCheck.Items[i]:=srcCheck.Items[i];
|
dstCheck.CheckEnabled[i]:=srcCheck.CheckEnabled[i]
|
||||||
dstCheck.Checked[i]:=srcCheck.Checked[i]
|
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
@ -28,8 +28,8 @@ unit CheckLst;
|
|||||||
interface
|
interface
|
||||||
|
|
||||||
uses
|
uses
|
||||||
Classes, SysUtils, LCLType, GraphType, Graphics, LMessages, Controls,
|
Classes, SysUtils, LCLType, GraphType, Graphics, LMessages, LResources,
|
||||||
StdCtrls;
|
Controls, StdCtrls;
|
||||||
|
|
||||||
|
|
||||||
type
|
type
|
||||||
@ -45,6 +45,9 @@ type
|
|||||||
procedure AssignItemDataToCache(const AIndex: Integer; const AData: Pointer); override;
|
procedure AssignItemDataToCache(const AIndex: Integer; const AData: Pointer); override;
|
||||||
procedure AssignCacheToItemData(const AIndex: Integer; const AData: Pointer); override;
|
procedure AssignCacheToItemData(const AIndex: Integer; const AData: Pointer); override;
|
||||||
function GetCachedDataSize: Integer; override;
|
function GetCachedDataSize: Integer; override;
|
||||||
|
procedure DefineProperties(Filer: TFiler); override;
|
||||||
|
procedure ReadData(Stream: TStream);
|
||||||
|
procedure WriteData(Stream: TStream);
|
||||||
public
|
public
|
||||||
constructor Create(AOwner: TComponent); override;
|
constructor Create(AOwner: TComponent); override;
|
||||||
property Checked[const AIndex: Integer]: Boolean read GetChecked write SetChecked;
|
property Checked[const AIndex: Integer]: Boolean read GetChecked write SetChecked;
|
||||||
@ -155,11 +158,59 @@ begin
|
|||||||
else PCachedItemData(GetCachedData(AIndex) + FItemDataOffset)^ := AValue;
|
else PCachedItemData(GetCachedData(AIndex) + FItemDataOffset)^ := AValue;
|
||||||
end;
|
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.
|
end.
|
||||||
|
|
||||||
{ =============================================================================
|
{ =============================================================================
|
||||||
|
|
||||||
$Log$
|
$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
|
Revision 1.9 2004/12/27 19:40:59 mattias
|
||||||
published BorderSpacing for many controls
|
published BorderSpacing for many controls
|
||||||
|
|
||||||
|
@ -208,7 +208,7 @@ end;
|
|||||||
procedure TCustomCheckGroup.DefineProperties(Filer: TFiler);
|
procedure TCustomCheckGroup.DefineProperties(Filer: TFiler);
|
||||||
begin
|
begin
|
||||||
inherited DefineProperties(Filer);
|
inherited DefineProperties(Filer);
|
||||||
Filer.DefineBinaryProperty('Data', @ReadData, @WriteData,true);
|
Filer.DefineBinaryProperty('Data', @ReadData, @WriteData,FItems.Count>0);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCustomCheckGroup.ReadData(Stream: TStream);
|
procedure TCustomCheckGroup.ReadData(Stream: TStream);
|
||||||
@ -275,6 +275,9 @@ end;
|
|||||||
|
|
||||||
{
|
{
|
||||||
$Log$
|
$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
|
Revision 1.11 2005/02/26 17:08:41 marc
|
||||||
* Reworked listviews to match new interface
|
* Reworked listviews to match new interface
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user